/ Hex Artifact Content
Login

Artifact 82a0f3e7c3410cc748c80268e0831dba5ea98cb4:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
3390: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
33a0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
33b0: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
33c0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
33d0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
33e0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
33f0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
3400: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
3410: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
3420: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
3430: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
3440: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
3450: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
3460: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
3470: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
3480: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
3490: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
34a0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
34b0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
34c0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
34d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
34e0: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
34f0: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
3500: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
3510: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
3520: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
3530: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
3540: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
3550: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
3560: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
3570: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
3580: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
3590: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
35a0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
35b0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
35c0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
35d0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
35e0: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
35f0: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
3600: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
3610: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
3620: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
3630: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
3640: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
3650: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
3660: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
3670: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
3680: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
36a0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
36b0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
36c0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
36d0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
36e0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
36f0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
3700: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3710: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
3720: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3730: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
3740: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
3750: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
3760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3770: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
3780: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
3790: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
37a0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
37b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
37c0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
37d0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
37e0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
37f0: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
3800: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
3810: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
3820: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
3830: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
3840: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
3850: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3860: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
3870: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
3880: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
3890: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
38a0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
38b0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
38c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
38d0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
38e0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
38f0: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
3900: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
3910: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
3920: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
3930: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
3940: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
3950: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
3960: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
3970: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
3980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
3990: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
39a0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
39b0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
39c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
39d0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
39e0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
39f0: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
3a00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
3a10: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
3a20: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
3a30: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
3a50: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3a60: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
3a70: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
3a80: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
3a90: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
3aa0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
3ab0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
3ac0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
3ad0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
3ae0: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
3af0: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
3b00: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
3b10: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
3b20: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
3b30: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
3b40: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
3b50: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
3b60: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
3b70: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
3b80: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
3b90: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
3ba0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
3bb0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
3bc0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
3bd0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
3be0: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
3bf0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
3c00: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
3c10: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
3c20: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
3c30: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
3c40: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
3c50: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
3c60: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
3c70: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
3c80: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3c90: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
3ca0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
3cb0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
3cc0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
3cd0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
3ce0: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
3cf0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
3d00: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
3d10: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
3d20: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
3d30: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
3d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
3d50: 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  s to determine w
3d60: 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69  hether the machi
3d70: 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74  ne is big or lit
3d80: 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65  tle endian,.** e
3d90: 76 61 6c 75 61 74 65 64 20 61 74 20 72 75 6e 74  valuated at runt
3da0: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
3db0: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
3dc0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
3dd0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
3de0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
3df0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
3e00: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
3e10: 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65 66 69  ed(i386) || defi
3e20: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c  ned(__i386__) ||
3e30: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
3e40: 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )\.             
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3e70: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
3e80: 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20 64 65  __x86_64__).# de
3e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3ea0: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
3eb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3ec0: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
3ed0: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
3ee0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
3ef0: 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65  F16LE.#else.# de
3f00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3f10: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
3f20: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
3f30: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
3f40: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3f50: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
3f60: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
3f70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
3f80: 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49 54  F16NATIVE (SQLIT
3f90: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
3fa0: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
3fb0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
3fc0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
3fd0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
3fe0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
3ff0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
4000: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
4010: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
4020: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
4030: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
4040: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
4050: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
4060: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
4070: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
4080: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
4090: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
40a0: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
40b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
40c0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
40d0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
40e0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
40f0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
4100: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
4110: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
4120: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
4130: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
4140: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
4150: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
4160: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
4170: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
4180: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
4190: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
41a0: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
41b0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
41c0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
41d0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
41e0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
41f0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
4200: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
4210: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
4220: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
4230: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
4240: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
4250: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
4260: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
4270: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
4280: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
4290: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
42a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
42b0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
42c0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
42d0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
42e0: 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74  plemention might
42f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
4300: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
4310: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
4320: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
4330: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
4340: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
4350: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4360: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
4370: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4380: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4390: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
43a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
43b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
43c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
43d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
43e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
43f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
4400: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
4410: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
4420: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
4430: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
4440: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
4450: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
4460: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
4470: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
4480: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
4490: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
44a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
44b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
44c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
44d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
44e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
44f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
4500: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
4510: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
4520: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
4530: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
4540: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
4550: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4560: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
4570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
4580: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
4590: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
45a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
45b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
45c0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
45d0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
45e0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
45f0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
4600: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
4610: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
4620: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
4630: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4650: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
4660: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
4670: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
4680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4690: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
46a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
46b0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
46c0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
46f0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
4700: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
4710: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
4720: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
4730: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
4740: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
4750: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
4760: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
4770: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
4780: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
4790: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
47a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
47b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
47c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
47d0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
47e0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
47f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
4800: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
4810: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
4820: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
4830: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
4840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
4850: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4860: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
4870: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
4880: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
4890: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
48a0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
48b0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
48c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
48d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
48e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
48f0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
4900: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
4910: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4920: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
4930: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
4940: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
4950: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
4960: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
4970: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4980: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
4990: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
49a0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
49b0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
49c0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
49d0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
49e0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
49f0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
4a00: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
4a10: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
4a20: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
4a30: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
4a40: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
4a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
4a60: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
4a70: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
4a80: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
4a90: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
4aa0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
4ab0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
4ac0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4ae0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
4af0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
4b00: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
4b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
4b20: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
4b30: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
4b40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
4b50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4b60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
4b70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
4b80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
4b90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
4ba0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
4bb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
4bc0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
4bd0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
4be0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
4bf0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
4c00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
4c10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
4c20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
4c30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4c40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
4c50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
4c60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4c70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
4c80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
4c90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
4ca0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
4cb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
4cc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
4cd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
4ce0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
4cf0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
4d00: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
4d10: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
4d20: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
4d30: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
4d40: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
4d50: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
4d60: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
4d70: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
4d80: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
4d90: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
4da0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
4db0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
4dc0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
4dd0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
4de0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
4df0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
4e00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
4e10: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
4e20: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
4e30: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
4e40: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
4e50: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
4e60: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
4e70: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
4e80: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
4e90: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
4ea0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
4eb0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
4ec0: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
4ed0: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
4ee0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
4ef0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
4f00: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
4f10: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
4f20: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
4f30: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
4f40: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
4f50: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
4f60: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
4f70: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
4f80: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
4f90: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
4fa0: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
4fb0: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
4fc0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
4fd0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
4fe0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
4ff0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
5000: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
5010: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
5020: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
5030: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
5040: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
5050: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
5060: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
5070: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
5080: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
5090: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
50a0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
50b0: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
50c0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
50d0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
50e0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
50f0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
5100: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
5110: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
5120: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
5130: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
5140: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5150: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
5160: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
5170: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
5180: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
5190: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
51a0: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
51b0: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
51c0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
51d0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
51e0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
51f0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
5200: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
5210: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
5220: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
5230: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
5240: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
5250: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
5260: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
5270: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
5280: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
5290: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
52a0: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
52b0: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
52c0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
52d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
52e0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
52f0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
5300: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5310: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
5320: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
5330: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
5340: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
5350: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5360: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
5370: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
5380: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
5390: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
53a0: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
53b0: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
53c0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
53d0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
53e0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
53f0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
5400: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
5410: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
5420: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5430: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
5440: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
5460: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
5470: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
5480: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
5490: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
54a0: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
54b0: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
54c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
54d0: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
54e0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
54f0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
5500: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
5510: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
5520: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
5530: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
5540: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
5550: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
5560: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
5570: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
5580: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
5590: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
55a0: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
55b0: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
55c0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
55d0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
55e0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
55f0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
5600: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
5610: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
5620: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
5630: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
5640: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
5650: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
5660: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5670: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
5680: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
5690: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
56a0: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
56b0: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
56c0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
56d0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
56e0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
56f0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
5700: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
5710: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
5720: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
5730: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
5740: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
5750: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
5760: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
5770: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
5780: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
5790: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
57a0: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
57b0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
57c0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
57d0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
57e0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
57f0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5800: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
5810: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
5820: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
5830: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
5840: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
5850: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
5860: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
5870: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
5880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
5890: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
58b0: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
58c0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
58d0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
58e0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
58f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
5900: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
5910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5920: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
5930: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5940: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
5950: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
5960: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5970: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
5980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5990: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
59a0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
59b0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
59c0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
59d0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
59e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
59f0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
5a00: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
5a10: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
5a20: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
5a30: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
5a40: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
5a50: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
5a60: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
5a70: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
5a80: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5aa0: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
5ab0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
5ac0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
5ad0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
5ae0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
5af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b00: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
5b10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b20: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
5b30: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
5b40: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
5b50: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
5b60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b70: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
5b90: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
5ba0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
5bb0: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
5bc0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
5bd0: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
5be0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5bf0: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
5c00: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
5c10: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
5c20: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
5c30: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
5c40: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
5c50: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
5c60: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
5c70: 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75  f struct StrAccu
5c80: 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65  m StrAccum;.type
5c90: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5ca0: 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20   Table;.typedef 
5cb0: 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b  struct TableLock
5cc0: 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65   TableLock;.type
5cd0: 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e  def struct Token
5ce0: 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20   Token;.typedef 
5cf0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
5d00: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
5d10: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
5d20: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
5d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
5d40: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
5d50: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
5d60: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
5d70: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
5d80: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
5d90: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
5da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5db0: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
5dc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5dd0: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
5de0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5df0: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
5e00: 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  fo;../*.** Defer
5e10: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
5e20: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
5e30: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
5e40: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
5e50: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
5e60: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
5e70: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
5e80: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
5e90: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
5ea0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
5eb0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
5ec0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
5ed0: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
5ee0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
5ef0: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
5f00: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
5f10: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
5f20: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
5f30: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
5f40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
5f50: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
5f60: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
5f70: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
5f80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5f90: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
5fa0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
5fb0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
5fc0: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
5fd0: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
5fe0: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
5ff0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
6000: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
6010: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6020: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
6030: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
6040: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
6050: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
6060: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
6070: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
6080: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
6090: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
60a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
60b0: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
60c0: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
60d0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
60e0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
60f0: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
6100: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
6110: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
6120: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
6130: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
6140: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
6150: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
6160: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
6170: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
6180: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
6190: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
61a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
61b0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
61c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
61d0: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
61e0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
61f0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
6200: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
6210: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
6220: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
6230: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
6240: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
6250: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
6260: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
6270: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
6280: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
6290: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
62a0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
62b0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
62c0: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
62d0: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
62e0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
62f0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
6300: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
6310: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
6320: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
6330: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
6340: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
6350: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
6360: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
6370: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
6380: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
6390: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
63a0: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
63b0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
63c0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
63d0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
63e0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
63f0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
6400: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
6410: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
6420: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
6430: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
6440: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
6450: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
6460: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
6470: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
6480: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
6490: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
64a0: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
64b0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
64c0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
64d0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
64e0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
64f0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
6500: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
6510: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
6520: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
6530: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
6540: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6550: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
6560: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
6570: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
6580: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
6590: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
65a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
65b0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
65c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
65d0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
65e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
65f0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
6600: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
6610: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
6620: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
6630: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
6640: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
6650: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
6660: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
6670: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
6680: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
6690: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
66a0: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
66b0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
66c0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
66d0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
66e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
66f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
6700: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
6710: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
6720: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
6730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
6740: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
6750: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
6760: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
6770: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
6780: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
6790: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
67a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
67b0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
67c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
67d0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
67e0: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
67f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6800: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
6810: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
6820: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
6830: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6840: 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
6850: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
6860: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
6870: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
6880: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6890: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
68a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
68b0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
68c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
68d0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
68e0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
68f0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
6900: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
6910: 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
6920: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
6930: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
6940: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
6950: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
6960: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
6970: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
6980: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6990: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
69a0: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
69b0: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
69c0: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
69d0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
69e0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
69f0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
6a00: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
6a10: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
6a20: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
6a30: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
6a40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
6a50: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
6a60: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
6a70: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
6a80: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
6a90: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6aa0: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
6ab0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
6ac0: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
6ad0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
6ae0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
6af0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
6b00: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
6b10: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
6b20: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
6b30: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
6b40: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
6b50: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
6b60: 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  s) */../*.** The
6b70: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
6b80: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
6b90: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
6ba0: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
6bb0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
6bc0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
6bd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6be0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
6bf0: 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
6c00: 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a  _DEPTH+1)../*.**
6c10: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
6c20: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
6c30: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
6c40: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
6c50: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
6c60: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
6c70: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6c80: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
6c90: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
6ca0: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
6cb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6cc0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
6cd0: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
6ce0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
6cf0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
6d00: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
6d10: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
6d20: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
6d30: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
6d40: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
6d50: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
6d60: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
6d70: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
6d80: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
6d90: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
6da0: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
6db0: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
6dc0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
6dd0: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
6de0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
6df0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
6e00: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
6e10: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
6e20: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
6e30: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
6e40: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
6e50: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
6e60: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
6e70: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
6e80: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
6e90: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
6ea0: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
6eb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6ec0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
6ed0: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
6ee0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
6ef0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
6f00: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
6f10: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
6f20: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
6f30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
6f40: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
6f50: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
6f60: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
6f70: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
6f80: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
6f90: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
6fa0: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
6fb0: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
6fc0: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
6fd0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6fe0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
6ff0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
7000: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
7010: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
7020: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
7030: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7040: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
7050: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
7060: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
7070: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
7080: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
7090: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
70a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
70b0: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
70c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
70d0: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
70e0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
70f0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
7100: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
7110: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7120: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
7130: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
7140: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
7150: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7160: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
7170: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
7180: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
7190: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
71a0: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
71b0: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
71c0: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
71d0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
71e0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
71f0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
7200: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
7210: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
7220: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
7230: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
7240: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
7250: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
7260: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
7270: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
7280: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
7290: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
72a0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
72b0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
72c0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
72d0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
72e0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
72f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
7300: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
7310: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
7320: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
7330: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
7340: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
7350: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
7360: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
7370: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
7380: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
7390: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
73a0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
73b0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
73c0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
73d0: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
73e0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
73f0: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
7400: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
7410: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7420: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7430: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
7440: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
7450: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
7460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
7470: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
7480: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
7490: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
74a0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
74b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
74c0: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
74d0: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
74e0: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
74f0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
7500: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
7510: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
7520: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
7530: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
7540: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
7550: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
7560: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
7570: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
7580: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
7590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
75a0: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
75b0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
75c0: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
75d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
75e0: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
75f0: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
7600: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
7610: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
7620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
7630: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
7640: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
7650: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
7660: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
7670: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
7680: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
7690: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
76a0: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
76b0: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
76c0: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
76d0: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
76e0: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
7710: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
7720: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
7730: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
7740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
7750: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
7760: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
7770: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20  urning */.  u16 
7780: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
7790: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
77a0: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
77b0: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
77c0: 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ns */.  u8 autoC
77d0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
77e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
77f0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
7800: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
7810: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7820: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
7830: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
7840: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
7850: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
7860: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
7870: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
7880: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
7890: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
78a0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
78b0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
78c0: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
78d0: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
78e0: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
78f0: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
7900: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
7910: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
7920: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
7930: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
7940: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
7950: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
7960: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
7970: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
7980: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
7990: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
79a0: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
79b0: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
79c0: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
79d0: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
79e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
79f0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
7a00: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
7a10: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
7a20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
7a30: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
7a40: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
7a50: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
7a80: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
7a90: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
7aa0: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ac0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
7ad0: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
7ae0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
7af0: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
7b00: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7b10: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7b20: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
7b30: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
7b40: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
7b50: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
7b60: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  s */.  struct sq
7b70: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
7b80: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
7b90: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
7ba0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
7bb0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7bc0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7bd0: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7be0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7bf0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7c00: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
7c20: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
7c30: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
7c40: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
7c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c60: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
7c70: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
7c80: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
7c90: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
7ca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
7cb0: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
7cc0: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
7cd0: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
7ce0: 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56 64  ;.  int activeVd
7cf0: 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  beCnt;          
7d00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
7d10: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 65  DBEs currently e
7d20: 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69 6e  xecuting */.  in
7d30: 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b 20  t writeVdbeCnt; 
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7d50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7d60: 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20 77  VDBEs that are w
7d70: 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  riting */.  int 
7d80: 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20 20  vdbeExecCnt;    
7d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7da0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
7db0: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
7dc0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  ) */.  int nExte
7dd0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
7de0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7df0: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
7e00: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
7e10: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
7e20: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
7e30: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
7e40: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
7e50: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
7e60: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
7e70: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
7e80: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
7e90: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ec0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
7ed0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7ee0: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
7ef0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7f00: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
7f10: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
7f20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
7f30: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
7f60: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
7f70: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
7f80: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
7f90: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7fa0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
7fb0: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7fc0: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
7fd0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
7fe0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
7ff0: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8000: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
8010: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
8020: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8030: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
8040: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
8050: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
8060: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
8070: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
8080: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8090: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
80a0: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
80b0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
80c0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
80d0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
80e0: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
80f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8100: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
8110: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
8120: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
8130: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
8140: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
8150: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
8160: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
8170: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
8180: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
8190: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
81a0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
81b0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
81c0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
81d0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
81e0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
81f0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
8200: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
8210: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8220: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8230: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
8240: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
8250: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8260: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8270: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
8280: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
8290: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
82a0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
82b0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
82c0: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
82d0: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
82e0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
82f0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
8300: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
8310: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
8320: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
8330: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
8340: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
8350: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
8360: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
8370: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
8380: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
8390: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
83a0: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
83b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
83c0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
83d0: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
83e0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
83f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8400: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8410: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
8440: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
8450: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8460: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
8470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
8480: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
8490: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
84a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
84b0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
84c0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
84d0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
84e0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
84f0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
8500: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
8510: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
8520: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
8530: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8540: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
8550: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
8560: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
8570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8580: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
8590: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
85a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
85b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
85c0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
85d0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
8600: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
8610: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
8620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8630: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
8640: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
8650: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
8660: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
8670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8680: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
8690: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
86a0: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
86b0: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
86c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
86d0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
86e0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
86f0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
8700: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
8710: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
8720: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
8730: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
8740: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
8750: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
8760: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
8770: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
8780: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
8790: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
87a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
87b0: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
87c0: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
87d0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
87e0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
87f0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
8800: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
8810: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
8820: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
8830: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
8840: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
8850: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
8860: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8870: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8880: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
8890: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
88a0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
88b0: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
88c0: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
88d0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
88e0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
88f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8900: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
8910: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
8920: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
8930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
8950: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
8960: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
8970: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
8980: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
8990: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
89a0: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
89b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
89c0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
89d0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
89e0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
89f0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
8a00: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
8a10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
8a20: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
8a30: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
8a40: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
8a50: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
8a60: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
8a70: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
8a80: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
8a90: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
8aa0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
8ab0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
8ac0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
8ad0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
8ae0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8af0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
8b00: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
8b10: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
8b20: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
8b30: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8b40: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
8b50: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
8b60: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
8b70: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
8b80: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
8b90: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
8ba0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
8bb0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
8bc0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
8bd0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
8be0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
8bf0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
8c00: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
8c10: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
8c20: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
8c30: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
8c40: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
8c50: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
8c60: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
8c70: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
8c80: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ca0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
8cb0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
8cc0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
8cd0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
8ce0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
8cf0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
8d00: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
8d10: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
8d20: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
8d30: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
8d40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
8d50: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
8d60: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
8d70: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
8d80: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
8d90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
8da0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
8db0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
8dc0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
8dd0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
8de0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
8df0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8e00: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
8e10: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
8e20: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
8e30: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
8e40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
8e50: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
8e60: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
8e70: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
8e80: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
8e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
8ea0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
8eb0: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
8ec0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
8ed0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
8ee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
8ef0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
8f00: 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77 20  000008  /* Show 
8f10: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
8f20: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
8f30: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8f40: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
8f50: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
8f60: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
8f70: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8fa0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
8fb0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
8fc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ff0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
9000: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
9010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9020: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
9030: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 49  0x00000020  /* I
9040: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
9050: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
9060: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
9090: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
90a0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
90b0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
90c0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
90d0: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
90e0: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
90f0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
9100: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
9110: 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20  g    0x00000080 
9120: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
9130: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
9140: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
9150: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
9160: 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30 20  a    0x00000100 
9170: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
9180: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
9190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91a0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
91b0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 54  0x00000200  /* T
91c0: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
91d0: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
91e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
91f0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
9200: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 6f  x00000400  /* Do
9210: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
9220: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
9250: 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20 46   0x0000800  /* F
9260: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
9270: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
9280: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
9290: 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30 30  eFmt  0x00001000
92a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
92b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
92c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
92d0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
92e0: 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30 30  c      0x0000200
92f0: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
9300: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9310: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9320: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9330: 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30 20  ync  0x00004000 
9340: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9350: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9360: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9370: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
9380: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
9390: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
93a0: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
93b0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
93c0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30 30  Order   0x000100
93d0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
93e0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
93f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9400: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
9410: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
9420: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
9430: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
9440: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
9450: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
9460: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  040000  /* Enfor
9470: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
9480: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
9490: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
94a0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
94b0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0080000  /* Enab
94c0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
94d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
94e0: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
94f0: 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30 30  ltin  0x00100000
9500: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
9510: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
9520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9530: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
9540: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
9550: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
9560: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
9570: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
9580: 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30 30  Trigger  0x00400
9590: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
95a0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
95b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
95c0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
95d0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
95e0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
95f0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9600: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9610: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9620: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9630: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9640: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9650: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9660: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9670: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9680: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9690: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
96a0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
96b0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
96c0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
96d0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
96e0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
96f0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9700: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9710: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9720: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9730: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9740: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9750: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9760: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
9770: 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  ne SQLITE_IdxRea
9780: 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20  lAsInt   0x0010 
9790: 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20    /* Store REAL 
97a0: 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65  as INT in indice
97b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
97c0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
97d0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
97e0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
97f0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
9800: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
9810: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
9820: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
9830: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
9840: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
9850: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
9860: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
9870: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
9880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9890: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
98a0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
98b0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
98c0: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
98d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98e0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
98f0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
9900: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
9910: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
9920: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
9930: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
9940: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
9950: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
9960: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
9970: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
9980: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9990: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
99a0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
99b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
99c0: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
99d0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
99e0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
99f0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a00: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
9a10: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9a20: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9a30: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
9a40: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
9a50: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9a60: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9a70: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9a80: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9a90: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9aa0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9ab0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9ac0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9ad0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9ae0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9af0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9b00: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9b10: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9b20: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9b30: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9b40: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9b50: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9b60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9b70: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9b80: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9b90: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9ba0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9bb0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9bc0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9bd0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9be0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9bf0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9c00: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9c10: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9c20: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9c30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9c40: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9c50: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9c60: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9c70: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9c80: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9c90: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9ca0: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9cb0: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9cc0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9cd0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9ce0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9cf0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9d00: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9d10: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9d20: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9d30: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9d40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9d50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9d60: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9d70: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9d80: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9d90: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9da0: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9db0: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9dc0: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9dd0: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9de0: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9df0: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9e00: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9e10: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9e20: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9e30: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9e50: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9e60: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9e70: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9e80: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9e90: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9ea0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9eb0: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9ec0: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9ed0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9ee0: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9ef0: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9f00: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9f10: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9f20: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9f30: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9f40: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9f50: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9f60: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9f70: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9f80: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
9f90: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
9fa0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
9fb0: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
9fc0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
9fd0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9fe0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9ff0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a000: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a010: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a020: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a030: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a040: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a050: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a060: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a070: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a080: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a090: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a0a0: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a0b0: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a0c0: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a0d0: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a0e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a0f0: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a100: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a110: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a120: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a130: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a140: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a150: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a160: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a170: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a180: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a190: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a1a0: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a1b0: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a1c0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a1d0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a1e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a1f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a200: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a210: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a220: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a230: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a240: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a250: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a260: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a270: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a280: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a290: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a2a0: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a2b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a2c0: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a2d0: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a2e0: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a2f0: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a300: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a310: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a320: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a330: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a340: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a350: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a360: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a370: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a380: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a390: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a3a0: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a3b0: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a3c0: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a3d0: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a3e0: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a3f0: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a400: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a410: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a420: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a430: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a440: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a450: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a460: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a470: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a480: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a490: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a4a0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a4b0: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a4c0: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a4d0: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a4e0: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a4f0: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a500: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a510: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a520: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a530: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a540: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a550: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a560: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a570: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a580: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a5a0: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a5b0: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a5c0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a5d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a5e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a5f0: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a600: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a610: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a620: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a630: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a640: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a650: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a660: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a670: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a680: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a690: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a6a0: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a6b0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a6c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a6d0: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a6e0: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a6f0: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a700: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a710: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a720: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a730: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a740: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a750: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a760: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a770: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a780: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a790: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a7a0: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a7b0: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a7c0: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a7d0: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a7e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a7f0: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a800: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a810: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a820: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a830: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a840: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a850: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a860: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a870: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a880: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a890: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a8a0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a8b0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a8c0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a8d0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a8e0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a8f0: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a900: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a910: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a920: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a930: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a940: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a950: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a960: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a970: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a980: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
a990: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
a9a0: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
a9b0: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
a9c0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
a9d0: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
a9e0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
a9f0: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
aa00: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
aa10: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
aa20: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
aa30: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aa40: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
aa50: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aa60: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aa70: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aa80: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
aa90: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
aaa0: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
aab0: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
aac0: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
aad0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
aae0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
aaf0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ab00: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ab10: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ab20: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
ab30: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
ab40: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
ab50: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
ab60: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
ab70: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
ab80: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ab90: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
aba0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
abb0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
abc0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
abd0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
abe0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
abf0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ac00: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ac10: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ac20: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
ac30: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
ac40: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
ac50: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
ac60: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ac70: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ac80: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ac90: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
aca0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
acb0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
acc0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
acd0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ace0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
acf0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ad00: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ad10: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
ad20: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ad30: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
ad40: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ad50: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
ad60: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ad70: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
ad80: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ad90: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ada0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
adb0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
adc0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
add0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ade0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
adf0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ae00: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
ae10: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ae20: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
ae30: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
ae40: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
ae50: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
ae60: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
ae70: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ae80: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
ae90: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
aea0: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
aeb0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
aec0: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
aed0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
aee0: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
aef0: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
af00: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
af10: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
af20: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
af30: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
af40: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
af50: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
af60: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
af70: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
af80: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
af90: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
afa0: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
afb0: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
afc0: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
afd0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
afe0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
aff0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
b000: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
b010: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
b020: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
b030: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
b040: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b050: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b060: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b070: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b0a0: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b0b0: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b0c0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b0e0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b0f0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b100: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
b120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
b130: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
b140: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
b150: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
b160: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
b170: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
b180: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
b190: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
b1a0: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
b1b0: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
b1c0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b1d0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
b1e0: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
b1f0: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
b200: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
b210: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
b220: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
b230: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
b240: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
b250: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
b260: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
b270: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
b280: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
b290: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
b2a0: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
b2b0: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
b2c0: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
b2d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
b2e0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
b2f0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
b300: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
b310: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
b320: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
b330: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
b340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
b350: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
b360: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
b370: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
b3a0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
b3b0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
b3c0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
b3d0: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
b3e0: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
b3f0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b400: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
b410: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
b420: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
b430: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
b440: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
b450: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
b460: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
b470: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
b480: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
b490: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
b4a0: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
b4b0: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
b4c0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
b4d0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b4e0: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
b4f0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
b500: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
b510: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
b520: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
b530: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
b540: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
b550: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
b560: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
b570: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
b580: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
b590: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
b5a0: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
b5b0: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
b5c0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
b5d0: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
b5e0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
b5f0: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
b600: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
b610: 65 73 20 2a 2f 0a 20 20 75 31 36 20 63 6f 6c 46  es */.  u16 colF
b620: 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42 6f 6f 6c  lags;    /* Bool
b630: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
b640: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
b650: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
b660: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
b670: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
b680: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
b690: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
b6a0: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
b6b0: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
b6c0: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
b6d0: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
b6e0: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
b6f0: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
b700: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
b710: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
b720: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
b730: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
b740: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
b750: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b760: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
b770: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
b780: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
b790: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
b7a0: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
b7b0: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
b7c0: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
b7d0: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
b7e0: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
b7f0: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
b800: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
b810: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
b820: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
b830: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
b840: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
b850: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
b860: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
b870: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b880: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
b890: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
b8a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
b8b0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b8c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
b8d0: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
b8e0: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
b8f0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
b900: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
b910: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
b920: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
b930: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
b940: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
b950: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
b960: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
b970: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
b980: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
b990: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
b9a0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
b9b0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
b9c0: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
b9d0: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
b9e0: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
b9f0: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
ba00: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
ba10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ba20: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
ba30: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
ba40: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
ba50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
ba60: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
ba70: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
ba80: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
ba90: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
baa0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
bab0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
bac0: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
bad0: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
bae0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
baf0: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
bb00: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
bb10: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
bb20: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
bb30: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
bb40: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
bb50: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
bb60: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
bb70: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
bb80: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
bb90: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
bba0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
bbb0: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
bbc0: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
bbd0: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
bbe0: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
bbf0: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
bc00: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
bc10: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
bc20: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
bc30: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
bc40: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
bc50: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
bc60: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
bc70: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
bc80: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
bc90: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
bca0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
bcb0: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
bcc0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
bcd0: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
bce0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
bcf0: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
bd00: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
bd10: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
bd20: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
bd30: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
bd40: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
bd50: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
bd60: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
bd70: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
bd80: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
bd90: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
bda0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
bdb0: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
bdc0: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
bdd0: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
bde0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
bdf0: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
be00: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
be10: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
be20: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
be30: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
be40: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
be50: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
be60: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
be70: 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65  affinity..*/.#de
be80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
be90: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
bea0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
beb0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
bec0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
bed0: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
bee0: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
bef0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
bf00: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
bf10: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
bf20: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
bf30: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
bf40: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
bf50: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
bf60: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
bf70: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
bf80: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
bf90: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
bfa0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
bfb0: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
bfc0: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
bfd0: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
bfe0: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
bff0: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
c000: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
c010: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c020: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
c030: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
c040: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
c050: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
c060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c070: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
c080: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
c090: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
c0a0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
c0b0: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
c0c0: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
c0d0: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
c0e0: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
c0f0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
c100: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
c110: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
c120: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c130: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
c140: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
c150: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
c160: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
c170: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
c180: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
c190: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
c1a0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
c1b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
c1c0: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
c1d0: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
c1e0: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
c1f0: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
c200: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
c210: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
c220: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
c230: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
c240: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
c250: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
c260: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
c270: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
c280: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
c290: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
c2a0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
c2b0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
c2c0: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
c2d0: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
c2e0: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
c2f0: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
c300: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
c310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
c320: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
c330: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
c340: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
c350: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
c360: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
c370: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
c380: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
c390: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
c3a0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
c3b0: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
c3c0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
c3d0: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
c3e0: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
c3f0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
c400: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
c410: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
c420: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
c430: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
c440: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
c450: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
c460: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
c470: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
c480: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
c490: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
c4a0: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
c4b0: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
c4c0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c4d0: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
c4e0: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
c4f0: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
c500: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
c510: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
c520: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
c530: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
c540: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
c550: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
c560: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
c570: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
c580: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
c590: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
c5a0: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
c5b0: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
c5c0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
c5d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c5e0: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
c5f0: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
c600: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
c610: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
c620: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
c630: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
c640: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
c650: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
c660: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
c670: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
c680: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
c690: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
c6a0: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
c6b0: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
c6c0: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
c6d0: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
c6e0: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
c6f0: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
c700: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
c710: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
c720: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
c730: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
c740: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
c750: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
c760: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
c770: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
c780: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
c790: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
c7a0: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
c7b0: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
c7c0: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
c7d0: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
c7e0: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
c7f0: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
c800: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
c810: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
c820: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
c830: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
c840: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
c850: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
c860: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
c870: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
c880: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
c890: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
c8a0: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
c8b0: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
c8c0: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
c8d0: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
c8e0: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
c8f0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
c900: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
c910: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
c920: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c930: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
c940: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
c950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
c960: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
c970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
c980: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
c990: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
c9a0: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
c9b0: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
c9c0: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
c9d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c9e0: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
c9f0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
ca00: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
ca10: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ca20: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
ca30: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
ca40: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
ca50: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
ca60: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
ca70: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
ca80: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
ca90: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
caa0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
cab0: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
cac0: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
cad0: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
cae0: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
caf0: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
cb00: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
cb10: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
cb20: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
cb30: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
cb40: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
cb50: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
cb60: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
cb70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
cb80: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
cb90: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
cba0: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
cbb0: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
cbc0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
cbd0: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
cbe0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
cbf0: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
cc00: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
cc10: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
cc20: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
cc30: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
cc40: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
cc50: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
cc60: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
cc70: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
cc80: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
cc90: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
cca0: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
ccb0: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
ccc0: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
ccd0: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
cce0: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
ccf0: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
cd00: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
cd10: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
cd20: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
cd30: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
cd40: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
cd50: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
cd60: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
cd70: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
cd80: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
cd90: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
cda0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cdb0: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
cdc0: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
cdd0: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
cde0: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
cdf0: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
ce00: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
ce10: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
ce20: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
ce30: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
ce40: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
ce50: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
ce60: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
ce70: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
ce80: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
ce90: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
cea0: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
ceb0: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
cec0: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
ced0: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
cee0: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
cef0: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
cf00: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
cf10: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
cf20: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
cf30: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
cf40: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
cf50: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
cf60: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
cf70: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
cf80: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
cf90: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
cfa0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
cfb0: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
cfc0: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
cfd0: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
cfe0: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
cff0: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
d000: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
d010: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
d020: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
d030: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
d040: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
d050: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
d060: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
d070: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
d080: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
d090: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
d0a0: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
d0b0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
d0c0: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
d0d0: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
d0e0: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
d0f0: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
d100: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d110: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
d120: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
d130: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
d140: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
d150: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
d160: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
d170: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
d180: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
d190: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
d1a0: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
d1b0: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
d1c0: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
d1d0: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
d1e0: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
d1f0: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
d200: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
d210: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
d220: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
d230: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
d240: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
d250: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
d260: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
d270: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
d280: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
d290: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d2a0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
d2b0: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
d2c0: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
d2d0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
d2e0: 64 69 66 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52  dif.  tRowcnt nR
d2f0: 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a 20 45 73  owEst;     /* Es
d300: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
d310: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
d320: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
d330: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
d340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
d350: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
d360: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
d370: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
d380: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
d390: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
d3a0: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
d3b0: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
d3c0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
d3d0: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
d3e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d3f0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
d400: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d410: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
d420: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d430: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
d440: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 38  is Table */.  u8
d450: 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
d460: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
d470: 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
d480: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
d490: 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
d4a0: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
d4b0: 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
d4c0: 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
d4d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d4e0: 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
d4f0: 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
d500: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
d510: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
d520: 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
d530: 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
d540: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d550: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d560: 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
d570: 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
d580: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
d590: 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
d5a0: 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
d5b0: 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f  eArg;  /* Text o
d5c0: 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67  f all module arg
d5d0: 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65  s. [0] is module
d5e0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c   name */.  VTabl
d5f0: 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
d600: 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
d610: 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
d620: 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
d630: 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
d640: 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
d650: 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
d660: 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
d670: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
d680: 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
d690: 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
d6a0: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
d6b0: 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
d6c0: 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
d6d0: 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
d6e0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
d6f0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
d700: 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a  be.tabFlags..*/.
d710: 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
d720: 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20  nly        0x01 
d730: 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
d740: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
d750: 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
d760: 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20  eral       0x02 
d770: 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
d780: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
d790: 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
d7a0: 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f  yKey   0x04    /
d7b0: 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
d7c0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
d7d0: 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
d7e0: 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20  ement   0x08    
d7f0: 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
d800: 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
d810: 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
d820: 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20  ne TF_Virtual   
d830: 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
d840: 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   Is a virtual ta
d850: 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ble */.../*.** T
d860: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
d870: 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
d880: 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
d890: 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
d8a0: 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
d8b0: 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
d8c0: 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
d8d0: 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
d8e0: 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
d8f0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d900: 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
d910: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d920: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
d930: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
d940: 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
d950: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
d960: 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20  _Virtual)!=0).# 
d970: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
d980: 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
d990: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
d9a0: 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
d9b0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
d9c0: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
d9d0: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
d9e0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
d9f0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
da00: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
da10: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
da20: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
da30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
da40: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
da50: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
da60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
da70: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
da80: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
da90: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
daa0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
dab0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
dac0: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
dad0: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
dae0: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
daf0: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
db00: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
db10: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
db20: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
db30: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
db40: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
db50: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
db60: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
db70: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
db80: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
db90: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
dba0: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
dbb0: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
dbc0: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
dbd0: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
dbe0: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
dbf0: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
dc00: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20  is "ex2"..**.** 
dc10: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
dc20: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
dc30: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
dc40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
dc50: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
dc60: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
dc70: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
dc80: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
dc90: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
dca0: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
dcb0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
dcc0: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
dcd0: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
dce0: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
dcf0: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
dd00: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
dd10: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
dd20: 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
dd30: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
dd40: 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
dd50: 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
dd60: 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67    /* Next foreig
dd70: 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a  n key in pFrom *
dd80: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
dd90: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
dda0: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
ddb0: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
ddc0: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
ddd0: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
dde0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69     /* Next forei
ddf0: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
de00: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46  named zTo */.  F
de10: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
de20: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72   /* Previous for
de30: 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c  eign key on tabl
de40: 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20  e named zTo */. 
de50: 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
de60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
de70: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
de80: 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
de90: 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
dea0: 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
deb0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
dec0: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
ded0: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
dee0: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
def0: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
df00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44           /* ON D
df10: 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
df20: 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
df30: 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
df40: 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
df50: 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65  r[2];  /* Trigge
df60: 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
df70: 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
df80: 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
df90: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
dfa0: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
dfb0: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
dfc0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
dfd0: 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  m;         /* In
dfe0: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
dff0: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
e000: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
e010: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
e020: 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30  mn in zTo.  If 0
e030: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
e040: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
e050: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
e060: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
e070: 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a   nCol column s *
e080: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
e090: 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
e0a0: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
e0b0: 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
e0c0: 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
e0d0: 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
e0e0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
e0f0: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
e100: 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
e110: 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
e120: 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
e130: 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
e140: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
e150: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
e160: 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
e170: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e180: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
e190: 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
e1a0: 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
e1b0: 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
e1c0: 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
e1d0: 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
e1e0: 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
e1f0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
e200: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
e210: 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
e220: 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
e230: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
e240: 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
e250: 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
e260: 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
e270: 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
e280: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
e290: 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
e2a0: 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
e2b0: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
e2c0: 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
e2d0: 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
e2e0: 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
e2f0: 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
e300: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
e310: 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
e320: 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
e330: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
e340: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
e350: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
e360: 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
e370: 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
e380: 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
e390: 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
e3a0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
e3b0: 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
e3c0: 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
e3d0: 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
e3e0: 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
e3f0: 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
e400: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
e410: 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
e420: 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
e430: 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
e440: 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
e450: 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
e460: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
e470: 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
e480: 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
e490: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
e4a0: 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
e4b0: 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
e4c0: 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
e4d0: 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
e4e0: 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
e4f0: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
e500: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
e510: 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
e520: 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
e530: 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
e540: 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
e550: 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
e560: 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
e570: 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
e580: 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
e590: 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
e5a0: 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
e5b0: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
e5c0: 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
e5d0: 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
e5e0: 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
e5f0: 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
e600: 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
e610: 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
e620: 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
e630: 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
e640: 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
e650: 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
e660: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
e670: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
e680: 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
e690: 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
e6a0: 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
e6b0: 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
e6c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
e6d0: 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
e6e0: 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
e6f0: 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
e700: 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
e710: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
e720: 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
e730: 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
e740: 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
e750: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
e760: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
e770: 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
e780: 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
e790: 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
e7a0: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
e7b0: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
e7c0: 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
e7d0: 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
e7e0: 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
e7f0: 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
e800: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e810: 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
e820: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e830: 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
e840: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e850: 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
e860: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e870: 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
e880: 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
e890: 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
e8a0: 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
e8b0: 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
e8c0: 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
e8d0: 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  99  /* Do whatev
e8e0: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
e8f0: 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
e900: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
e910: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e920: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
e930: 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
e940: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
e950: 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
e960: 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
e970: 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
e980: 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
e990: 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
e9a0: 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63  x keys..*/.struc
e9b0: 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71  t KeyInfo {.  sq
e9c0: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
e9d0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
e9e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
e9f0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
ea00: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
ea10: 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
ea20: 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
ea30: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
ea40: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
ea50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
ea60: 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20  ries in aColl[] 
ea70: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
ea80: 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
ea90: 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
eaa0: 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20  column.  May be 
eab0: 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  NULL */.  CollSe
eac0: 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
ead0: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
eae0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
eaf0: 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
eb00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
eb10: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
eb20: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
eb30: 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
eb40: 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69  on about a.** si
eb50: 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72  ngle index recor
eb60: 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
eb70: 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  dy been parsed o
eb80: 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
eb90: 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  al.** values..**
eba0: 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
ebb0: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
ebc0: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
ebd0: 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
ebe0: 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
ebf0: 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
ec00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ec10: 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
ec20: 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
ec30: 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
ec40: 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
ec50: 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
ec60: 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
ec70: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
ec80: 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
ec90: 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
eca0: 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
ecb0: 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
ecc0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  de..**.** This s
ecd0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61  tructure holds a
ece0: 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
ecf0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69   already been di
ed00: 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e  sassembled.** in
ed10: 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65  to its constitue
ed20: 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74  nt fields..*/.st
ed30: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
ed40: 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
ed50: 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
ed60: 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
ed70: 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
ed80: 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ion */.  u16 nFi
ed90: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
eda0: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
edb0: 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
edc0: 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20    u8 flags;     
edd0: 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e        /* Boolean
ede0: 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41   settings.  UNPA
edf0: 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a  CKED_... below *
ee00: 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
ee10: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
ee20: 62 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  by UNPACKED_PREF
ee30: 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d  IX_SEARCH */.  M
ee40: 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
ee50: 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
ee60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
ee70: 64 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61  d values of Unpa
ee80: 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73  ckedRecord.flags
ee90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41  .*/.#define UNPA
eea0: 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20  CKED_INCRKEY    
eeb0: 20 20 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65     0x01  /* Make
eec0: 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73   this key an eps
eed0: 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23  ilon larger */.#
eee0: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
eef0: 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78  PREFIX_MATCH  0x
ef00: 30 32 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20  02  /* A prefix 
ef10: 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65  match is conside
ef20: 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e  red OK */.#defin
ef30: 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  e UNPACKED_PREFI
ef40: 58 5f 53 45 41 52 43 48 20 30 78 30 34 20 20 2f  X_SEARCH 0x04  /
ef50: 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28  * Ignore final (
ef60: 72 6f 77 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a  rowid) field */.
ef70: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ef80: 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
ef90: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
efa0: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
efb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
efc0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
efd0: 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
efe0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
eff0: 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
f000: 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
f010: 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
f020: 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
f030: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
f040: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
f050: 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
f060: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
f070: 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
f080: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
f090: 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
f0a0: 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
f0b0: 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
f0c0: 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
f0d0: 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
f0e0: 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
f0f0: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
f100: 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
f110: 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
f120: 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
f130: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
f140: 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
f150: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
f160: 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
f170: 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
f180: 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
f190: 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
f1a0: 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
f1b0: 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
f1c0: 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
f1d0: 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
f1e0: 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
f1f0: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
f200: 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
f210: 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
f220: 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
f230: 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
f240: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
f250: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
f260: 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
f270: 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
f280: 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
f290: 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
f2a0: 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
f2b0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
f2c0: 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
f2d0: 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
f2e0: 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
f2f0: 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
f300: 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
f310: 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
f320: 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
f330: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
f340: 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
f350: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
f360: 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
f370: 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
f380: 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
f390: 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
f3a0: 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
f3b0: 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
f3c0: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
f3d0: 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
f3e0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
f3f0: 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
f400: 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
f410: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
f420: 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
f430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
f440: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
f450: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  ndex */.  int *a
f460: 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
f470: 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
f480: 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
f490: 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
f4a0: 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63   is 0 */.  tRowc
f4b0: 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
f4c0: 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
f4d0: 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
f4e0: 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
f4f0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
f500: 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
f510: 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
f520: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
f530: 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
f540: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
f550: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
f560: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
f570: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
f580: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
f590: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
f5a0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
f5b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
f5c0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
f5d0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
f5e0: 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
f5f0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
f600: 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
f610: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
f620: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
f630: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
f640: 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
f650: 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
f660: 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
f670: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
f680: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
f690: 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
f6a0: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  dex */.  int tnu
f6b0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
f6c0: 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
f6d0: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f6e0: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f6f0: 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
f700: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f710: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
f720: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
f730: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f740: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f750: 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
f760: 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
f770: 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
f780: 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
f790: 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32  gned autoIndex:2
f7a0: 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55  ;    /* 1==UNIQU
f7b0: 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
f7c0: 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
f7d0: 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
f7e0: 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
f7f0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f800: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f810: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f820: 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
f830: 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
f840: 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
f850: 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
f860: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66  l columns */.#if
f870: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
f880: 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e 53  E_STAT3.  int nS
f890: 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
f8a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f8b0: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
f8c0: 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77 63  ple[] */.  tRowc
f8d0: 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20 20  nt avgEq;       
f8e0: 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
f8f0: 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79  Eq value for key
f900: 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20 61   values not in a
f910: 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
f920: 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
f930: 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
f940: 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
f950: 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
f960: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
f970: 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
f980: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
f990: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
f9a0: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
f9b0: 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
f9c0: 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
f9d0: 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
f9e0: 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
f9f0: 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
fa00: 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
fa10: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fa20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fa30: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
fa40: 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  le {.  union {. 
fa50: 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20     char *z;     
fa60: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fa70: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 54  Type is SQLITE_T
fa80: 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42 4c  EXT or SQLITE_BL
fa90: 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  OB */.    double
faa0: 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c   r;       /* Val
fab0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fac0: 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20  QLITE_FLOAT */. 
fad0: 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20     i64 i;       
fae0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
faf0: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 49  Type is SQLITE_I
fb00: 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b  NTEGER */.  } u;
fb10: 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
fb20: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
fb30: 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45  ULL, SQLITE_INTE
fb40: 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a  GER ... etc. */.
fb50: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
fb60: 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62      /* Size in b
fb70: 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62  yte of text or b
fb80: 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  lob. */.  tRowcn
fb90: 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20 45  t nEq;      /* E
fba0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
fbb0: 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
fbc0: 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
fbd0: 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
fbe0: 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45 73   nLt;      /* Es
fbf0: 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
fc00: 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
fc10: 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
fc20: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
fc30: 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20 45  t nDLt;     /* E
fc40: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
fc50: 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
fc60: 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
fc70: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
fc80: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
fc90: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
fca0: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
fcb0: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
fcc0: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
fcd0: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
fce0: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
fcf0: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
fd00: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
fd10: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
fd20: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
fd30: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
fd40: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
fd50: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
fd60: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
fd70: 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
fd80: 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
fd90: 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
fda0: 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
fdb0: 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
fdc0: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
fdd0: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
fde0: 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
fdf0: 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
fe00: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
fe10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fe20: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
fe30: 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
fe40: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
fe50: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
fe60: 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
fe70: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
fe80: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
fe90: 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
fea0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
feb0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
fec0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
fed0: 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
fee0: 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
fef0: 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
ff00: 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
ff10: 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
ff20: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
ff30: 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
ff40: 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
ff50: 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
ff60: 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
ff70: 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
ff80: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
ff90: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
ffa0: 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
ffb0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
ffc0: 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
ffd0: 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
ffe0: 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
fff0: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
10000 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
10010 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10020 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
10030 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
10040 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
10050 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
10060 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
10070 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
10080 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
10090 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
100a0 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
100b0 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
100c0 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
100d0 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
100e0 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
100f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10100 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
10110 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
10120 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
10130 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
10140 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
10150 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
10160 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
10170 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
10180 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
10190 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
101a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
101b0 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
101c0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
101d0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
101e0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
101f0 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
10200 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
10210 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
10220 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
10230 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
10240 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
10250 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
10260 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10270 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
10280 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10290 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
102a0 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
102b0 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
102c0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
102d0 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
102e0 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
102f0 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
10300 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
10310 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
10320 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
10330 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
10340 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
10350 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
10360 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
10370 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10380 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
10390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
103a0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
103b0 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
103c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
103d0 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
103e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
103f0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
10400 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
10410 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10430 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10440 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10450 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
10460 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10470 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
10480 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
10490 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
104a0 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
104b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
104c0 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
104d0 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
104e0 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
104f0 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
10500 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10510 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
10520 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
10530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10540 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
10550 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
10560 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
10570 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
105a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
105b0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
105c0 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
105d0 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
105e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
105f0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10610 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
10620 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
10630 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
10640 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
10650 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
10660 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
10670 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
10680 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
10690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
106a0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
106b0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
106c0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
106d0 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
106e0 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
106f0 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
10700 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
10710 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
10720 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
10730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10740 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
10750 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
10760 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
10770 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
10780 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
10790 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
107a0 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
107b0 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
107c0 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
107d0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
107e0 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
107f0 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
10800 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
10810 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
10820 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
10830 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
10840 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
10850 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
10860 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
10870 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
10880 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
10890 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
108a0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
108b0 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
108c0 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
108d0 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
108e0 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
108f0 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
10900 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
10910 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
10920 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
10930 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
10940 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
10950 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
10960 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
10970 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
10980 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
10990 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
109a0 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
109b0 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
109c0 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
109d0 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
109e0 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
109f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
10a00 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
10a10 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
10a20 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
10a30 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
10a40 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
10a50 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
10a60 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
10a70 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
10a80 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
10a90 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
10aa0 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
10ab0 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
10ac0 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
10ad0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10ae0 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
10af0 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
10b00 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
10b10 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
10b20 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
10b30 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
10b40 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
10b50 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
10b60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10b70 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10b80 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
10b90 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
10ba0 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
10bb0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
10bc0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10bd0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
10be0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
10bf0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
10c00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
10c10 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
10c20 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
10c30 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10c40 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
10c50 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
10c60 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10c70 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10c80 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
10c90 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
10ca0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10cb0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
10cc0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
10cd0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
10ce0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
10cf0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
10d00 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
10d10 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
10d20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
10d30 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
10d40 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
10d50 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
10d60 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
10d70 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10d80 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10d90 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
10da0 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
10db0 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
10dc0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
10dd0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
10de0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
10df0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
10e00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10e10 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
10e20 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
10e30 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
10e40 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
10e50 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
10e60 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
10e70 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
10e80 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
10e90 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
10ea0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
10eb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
10ec0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
10ed0 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
10ee0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
10ef0 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
10f00 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
10f10 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
10f20 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
10f30 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
10f40 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
10f50 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
10f60 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
10f70 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
10f80 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
10f90 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
10fa0 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
10fb0 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
10fc0 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
10fd0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
10fe0 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
10ff0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
11000 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
11010 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
11020 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
11030 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
11040 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
11050 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
11060 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
11070 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
11080 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
11090 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
110a0 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
110b0 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
110c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
110d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
110e0 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
110f0 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
11100 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
11110 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
11120 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
11130 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
11140 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
11150 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
11160 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
11170 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11180 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11190 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
111a0 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
111b0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
111c0 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
111d0 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
111e0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
111f0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
11200 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
11210 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
11220 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
11230 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
11240 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
11250 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
11260 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
11270 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
11280 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
11290 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
112a0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
112b0 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
112c0 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
112d0 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
112e0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
112f0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
11300 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
11310 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
11320 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
11330 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
11340 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
11350 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
11360 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
11370 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
11380 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
11390 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
113a0 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
113b0 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
113c0 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
113d0 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
113e0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
113f0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
11400 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
11410 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
11420 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
11430 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
11440 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
11450 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11460 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11470 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
11480 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
11490 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
114a0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
114b0 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
114c0 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
114d0 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
114e0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
114f0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
11500 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
11510 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
11520 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
11530 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
11540 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
11550 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
11560 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
11570 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
11580 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
11590 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
115a0 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
115b0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
115c0 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
115d0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
115e0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
115f0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
11600 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
11610 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
11620 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
11630 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
11640 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
11650 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
11660 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
11670 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
11680 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
11690 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
116a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
116b0 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
116c0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
116d0 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
116e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
116f0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
11700 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
11710 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
11720 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
11730 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
11740 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
11750 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
11760 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
11770 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
11780 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
11790 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
117a0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
117b0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
117c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
117d0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
117e0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
117f0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
11800 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
11810 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
11820 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
11830 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
11840 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
11850 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
11860 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
11870 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
11880 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
11890 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
118a0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
118b0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
118c0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
118d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11910 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
11920 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
11930 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
11940 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
11950 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
11960 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
11970 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
11980 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
11990 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
119a0 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20  arguments or in 
119b0 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70  "<expr> IN (<exp
119c0 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20 20  r-list)" */.    
119d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
119e0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
119f0 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
11a00 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
11a10 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78  lect>)" */.  } x
11a20 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
11a30 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
11a40 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11a50 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11a60 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11a70 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11a80 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11a90 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11aa0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11ab0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11ac0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11ad0 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11ae0 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
11af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11b30 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
11b40 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
11b50 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
11b60 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
11b70 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
11b80 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
11b90 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
11ba0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
11bb0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
11bc0 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
11bd0 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
11be0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c00 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
11c10 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
11c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c30 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11c40 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
11c50 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20  w, 0 -> old */. 
11c60 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
11c70 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11c80 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
11c90 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
11ca0 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11cc0 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
11cd0 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
11ce0 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
11cf0 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
11d00 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11d10 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
11d20 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
11d30 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
11d40 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
11d50 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
11d60 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
11d70 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
11d80 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32  n */.  u8 flags2
11d90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11da0 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66   Second set of f
11db0 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a  lags.  EP2_... *
11dc0 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
11dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11de0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
11df0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
11e00 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11e20 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
11e30 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
11e40 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
11e70 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
11e80 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
11e90 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
11ea0 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
11eb0 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
11ec0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
11ed0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
11ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
11ef0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
11f00 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
11f10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11f20 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
11f30 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
11f40 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
11f50 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11f60 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
11f70 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
11f80 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
11f90 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
11fa0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
11fb0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
11fc0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
11fd0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
11fe0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
11ff0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
12000 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
12010 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
12020 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
12030 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
12040 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
12050 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
12060 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
12070 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
12080 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
12090 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
120a0 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
120b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
120c0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
120d0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
120e0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
120f0 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
12100 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
12110 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
12120 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
12130 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
12140 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
12150 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
12160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12170 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
12180 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
12190 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
121a0 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
121b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
121c0 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30 30  ollate    0x0100
121d0 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69    /* Tree contai
121e0 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
121f0 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66  opeartor */.#def
12200 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74  ine EP_FixedDest
12210 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73    0x0200  /* Res
12220 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20  ult needed in a 
12230 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65  specific registe
12240 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
12250 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30  IntValue   0x040
12260 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  0  /* Integer va
12270 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12280 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
12290 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
122a0 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e  t  0x0800  /* x.
122b0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
122c0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
122d0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
122e0 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20  ne EP_Hint      
122f0 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20   0x1000  /* Not 
12300 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
12310 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
12320 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  2000  /* Expr st
12330 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45 44  ruct is EXPR_RED
12340 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
12350 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
12360 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34  P_TokenOnly  0x4
12370 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72  000  /* Expr str
12380 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45  uct is EXPR_TOKE
12390 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
123a0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
123b0 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30 78  EP_Static     0x
123c0 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e  8000  /* Held in
123d0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
123e0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
123f0 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  () */../*.** The
12400 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
12410 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
12420 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
12430 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f  flags2 field..*/
12440 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c  .#define EP2_Mal
12450 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30  locedToken  0x00
12460 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  01  /* Need to s
12470 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12480 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
12490 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75  efine EP2_Irredu
124a0 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32 20  cible    0x0002 
124b0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
124c0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
124d0 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  xpr */../*.** Th
124e0 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65  e pseudo-routine
124f0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 49   sqlite3ExprSetI
12500 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73 20  rreducible sets 
12510 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  the EP2_Irreduci
12520 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61  ble.** flag on a
12530 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  n expression str
12540 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c  ucture.  This fl
12550 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ag is used for V
12560 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a  V&A only.  The.*
12570 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  * routine is imp
12580 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61  lemented as a ma
12590 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f  cro that only wo
125a0 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75  rks when in debu
125b0 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73  gging mode,.** s
125c0 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64  o as not to burd
125d0 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f  en production co
125e0 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  de..*/.#ifdef SQ
125f0 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
12600 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
12610 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e  ucible(X)  (X)->
12620 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72  flags2 |= EP2_Ir
12630 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a  reducible.#else.
12640 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
12650 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23  Irreducible(X).#
12660 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
12670 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12680 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12690 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
126a0 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
126b0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
126c0 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
126d0 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
126e0 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
126f0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
12700 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f  ne ExprHasAnyPro
12710 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
12720 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
12730 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
12740 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
12750 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12760 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12770 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12780 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12790 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ~(P)../*.** Macr
127a0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
127b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
127c0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
127d0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
127e0 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
127f0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
12800 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
12810 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
12820 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
12830 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
12840 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
12850 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
12860 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
12870 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
12880 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
12890 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
128a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
128b0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
128c0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
128d0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
128e0 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
128f0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
12900 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
12910 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12920 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
12930 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
12940 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
12950 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
12960 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
12970 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
12980 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
12990 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
129a0 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
129b0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
129c0 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
129d0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
129e0 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
129f0 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
12a00 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
12a10 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
12a20 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
12a30 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
12a40 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
12a50 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
12a60 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
12a70 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
12a80 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
12a90 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
12aa0 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
12ab0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
12ac0 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
12ad0 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
12ae0 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
12af0 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
12b00 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12b10 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
12b20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12b30 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
12b40 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
12b50 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
12b60 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
12b70 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
12b80 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
12b90 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
12ba0 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
12bb0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
12bc0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
12bd0 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
12be0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
12bf0 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
12c00 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
12c10 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
12c20 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
12c30 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
12c40 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
12c50 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
12c60 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
12c70 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
12c80 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
12c90 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
12ca0 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
12cb0 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
12cc0 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
12cd0 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
12ce0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
12cf0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
12d00 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
12d10 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
12d20 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
12d30 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
12d40 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
12d50 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
12d60 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
12d70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
12d80 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12d90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
12da0 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
12db0 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
12dc0 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
12dd0 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
12de0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12df0 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
12e00 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
12e10 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
12e20 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
12e30 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
12e40 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
12e50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12e60 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
12e70 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
12e80 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12e90 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12ea0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12eb0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
12ec0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
12ed0 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
12ee0 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
12ef0 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
12f00 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
12f10 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
12f20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
12f30 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
12f40 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
12f50 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
12f60 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
12f70 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
12f80 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
12f90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
12fa0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
12fb0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
12fc0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
12fd0 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
12fe0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
12ff0 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
13000 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
13010 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
13020 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
13030 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
13040 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
13050 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13060 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13070 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13080 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13090 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
130a0 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
130b0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
130c0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
130d0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
130e0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
130f0 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
13100 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
13110 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
13120 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
13130 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
13140 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
13150 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13160 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13170 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13180 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13190 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
131a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
131b0 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
131c0 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
131d0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
131e0 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
131f0 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
13200 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
13210 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
13220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
13230 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
13240 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
13250 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13260 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13270 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13280 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13290 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
132a0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
132b0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
132c0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
132d0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
132e0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
132f0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
13300 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
13310 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
13320 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
13330 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
13340 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
13350 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13360 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13370 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13380 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13390 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
133a0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
133b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
133c0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
133d0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
133e0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
133f0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
13400 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
13410 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
13420 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
13430 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
13440 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
13450 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13460 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13470 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13480 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
13490 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
134a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
134b0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
134c0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
134d0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
134e0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
134f0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
13500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
13510 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
13520 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
13530 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
13540 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
13550 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
13560 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
13570 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
13580 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
13590 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
135a0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
135b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
135c0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
135d0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
135e0 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
135f0 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
13600 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
13610 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
13620 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
13630 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
13640 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
13650 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
13660 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
13670 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
13680 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
13690 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
136a0 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
136b0 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
136c0 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
136d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
136e0 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
136f0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
13700 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
13710 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13720 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
13730 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
13740 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
13750 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13760 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13770 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13780 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13790 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
137a0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
137b0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
137c0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
137d0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
137e0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
137f0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
13800 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
13810 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
13820 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
13830 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
13840 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
13850 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13860 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13870 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13880 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13890 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
138a0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
138b0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
138c0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
138d0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
138e0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
138f0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13900 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13910 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13920 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13930 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13940 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13950 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13960 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13970 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13980 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13990 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
139a0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
139b0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
139c0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
139d0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
139e0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
139f0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13a00 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13a10 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13a20 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13a30 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13a40 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13a50 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13a60 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13a70 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13a80 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13a90 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13aa0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13ab0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13ac0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13ad0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13ae0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13af0 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
13b00 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
13b10 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
13b20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
13b30 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13b40 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
13b50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13b60 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13b70 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13b80 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13b90 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13ba0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13bb0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13bc0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13bd0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13be0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13bf0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13c00 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13c10 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13c20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13c30 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13c40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13c50 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13c60 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13c70 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13c80 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13c90 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13ca0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13cb0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13cc0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13cd0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13ce0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13cf0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13d00 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13d10 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13d20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13d30 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13d40 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13d50 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13d60 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13d70 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13d80 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13d90 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13da0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13db0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13dc0 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13dd0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13de0 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13df0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13e00 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13e10 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13e20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13e30 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13e40 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13e50 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
13e60 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
13e70 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
13e80 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
13e90 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
13ea0 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
13eb0 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
13ec0 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
13ed0 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
13ee0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
13ef0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
13f00 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
13f10 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
13f20 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
13f30 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
13f40 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
13f50 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
13f60 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13f70 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
13f80 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
13f90 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
13fa0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
13fb0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
13fc0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
13fd0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
13fe0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
13ff0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
14000 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
14010 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
14020 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
14030 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
14040 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
14050 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14060 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14070 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14080 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14090 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
140a0 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
140b0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
140c0 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
140d0 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
140e0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
140f0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14100 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
14110 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
14120 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
14130 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
14140 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
14150 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14160 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14170 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14180 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14190 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
141a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
141b0 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
141c0 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
141d0 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
141e0 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
141f0 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
14200 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
14210 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
14220 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
14230 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
14240 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
14250 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14260 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14270 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14280 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14290 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
142a0 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
142b0 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
142c0 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
142d0 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
142e0 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
142f0 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
14300 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
14310 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
14320 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
14330 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
14340 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
14350 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14360 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14370 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14380 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14390 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
143a0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
143b0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
143c0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
143d0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
143e0 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
143f0 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
14400 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
14410 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
14420 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14430 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
14440 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14450 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14460 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14470 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
14480 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
14490 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
144a0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
144b0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
144c0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
144d0 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
144e0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
144f0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
14500 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
14510 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
14520 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
14530 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
14540 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
14550 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
14560 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
14570 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
14580 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
14590 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
145a0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
145b0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
145c0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
145d0 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
145e0 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
145f0 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
14600 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
14610 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
14620 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
14630 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
14640 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
14650 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
14660 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
14670 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
14680 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14690 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
146a0 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
146b0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
146c0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
146d0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
146e0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
146f0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
14700 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
14710 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
14720 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
14730 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
14740 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
14750 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14760 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
14770 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
14780 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
14790 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
147a0 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
147b0 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
147c0 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
147d0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
147e0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
147f0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
14800 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
14810 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
14820 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
14830 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
14840 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
14850 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
14860 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
14870 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
14880 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
14890 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
148a0 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
148b0 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
148c0 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
148d0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
148e0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
148f0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
14900 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
14910 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
14920 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
14930 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
14940 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
14950 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
14960 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
14970 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
14980 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
14990 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
149a0 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
149b0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
149c0 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
149d0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
149e0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
149f0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
14a00 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
14a10 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
14a20 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
14a30 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
14a40 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
14a50 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
14a60 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
14a70 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
14a80 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
14a90 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
14aa0 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
14ab0 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
14ac0 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
14ad0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
14ae0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
14af0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
14b00 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
14b10 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
14b20 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
14b30 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
14b40 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
14b50 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
14b60 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
14b70 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
14b80 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
14b90 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
14ba0 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
14bb0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
14bc0 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
14bd0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
14be0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
14bf0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
14c00 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
14c10 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
14c20 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
14c30 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
14c40 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
14c50 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
14c60 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
14c70 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
14c80 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
14c90 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
14ca0 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
14cb0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
14cc0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
14cd0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
14ce0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
14cf0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
14d00 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
14d10 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
14d20 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 41 67  ressions */.  Ag
14d30 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
14d40 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
14d50 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
14d60 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
14d70 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
14d80 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
14d90 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
14da0 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
14db0 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
14dc0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
14dd0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14de0 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
14df0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
14e00 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
14e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14e20 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
14e30 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
14e40 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
14e50 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73   */.  u8 ncFlags
14e60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  ;          /* Ze
14e70 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
14e80 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
14e90 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
14ea0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
14eb0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
14ec0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
14ed0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ld..*/.#define N
14ee0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31  C_AllowAgg  0x01
14ef0 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
14f00 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
14f10 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
14f20 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
14f30 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
14f40 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
14f50 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
14f60 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
14f70 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34  C_IsCheck   0x04
14f80 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
14f90 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
14fa0 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
14fb0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
14fc0 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
14fd0 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  8    /* True if 
14fe0 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
14ff0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
15000 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
15010 5f 41 73 4d 61 79 62 65 20 20 20 30 78 31 30 20  _AsMaybe   0x10 
15020 20 20 20 2f 2a 20 52 65 73 6f 6c 76 65 20 74 6f     /* Resolve to
15030 20 41 53 20 74 65 72 6d 73 20 6f 66 20 74 68 65   AS terms of the
15040 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79   result set only
15050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
15070 20 69 66 20 6e 6f 20 6f 74 68 65 72 20 72 65 73   if no other res
15080 6f 6c 75 74 69 6f 6e 20 69 73 20 61 76 61 69 6c  olution is avail
15090 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
150a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
150b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
150c0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
150d0 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
150e0 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
150f0 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
15100 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
15110 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
15120 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
15130 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
15140 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
15150 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
15160 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
15170 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
15180 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
15190 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
151a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
151b0 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
151c0 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
151d0 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
151e0 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
151f0 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
15200 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
15210 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
15220 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
15230 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
15240 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
15250 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
15260 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
15270 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
15280 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
15290 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
152a0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
152b0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
152c0 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
152d0 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
152e0 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
152f0 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
15300 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
15310 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
15320 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
15330 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
15340 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
15350 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
15360 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
15370 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
15380 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
15390 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
153a0 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
153b0 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
153c0 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
153d0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
153e0 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
153f0 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
15400 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
15410 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
15420 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
15430 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
15440 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
15450 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
15460 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
15470 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
15480 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
15490 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
154a0 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
154b0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
154c0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
154d0 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
154e0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
154f0 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
15500 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
15510 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
15520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
15530 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
15540 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
15550 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
15560 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b  .  u16 selFlags;
15570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
15580 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
15590 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
155a0 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
155b0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
155c0 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
155d0 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
155e0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
155f0 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20  enEphm[3];   /* 
15600 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
15610 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
15620 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
15630 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b   u64 nSelectRow;
15640 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
15650 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
15660 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20  esult rows */.  
15670 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
15680 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
15690 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
156a0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
156b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
156c0 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
156d0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
156e0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
156f0 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
15700 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
15710 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15720 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
15730 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
15740 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
15750 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15760 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
15770 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
15780 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
15790 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
157a0 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
157b0 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
157c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
157d0 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
157e0 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
157f0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 52   */.  Select *pR
15800 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20  ightmost;    /* 
15810 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63  Right-most selec
15820 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
15830 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
15840 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
15850 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
15860 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
15870 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
15880 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
15890 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
158a0 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
158b0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
158c0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
158d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
158e0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
158f0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
15900 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
15910 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
15920 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
15930 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
15940 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
15950 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
15960 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
15970 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
15980 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
15990 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66  0002  /* Identif
159a0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
159b0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
159c0 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
159d0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
159e0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
159f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
15a00 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
15a10 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
15a20 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  08  /* Uses the 
15a30 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
15a40 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
15a50 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
15a60 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71     0x0010  /* sq
15a70 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
15a80 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
15a90 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
15aa0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
15ab0 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d   0x0020  /* FROM
15ac0 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
15ad0 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
15ae0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
15af0 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78  eSorter       0x
15b00 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75 73  0040  /* Sort us
15b10 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a  ing a sorter */.
15b20 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
15b30 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30 38  s          0x008
15b40 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
15b50 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
15b60 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
15b70 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20 20  SF_Materialize  
15b80 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46 6f     0x0100  /* Fo
15b90 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61 74  rce materializat
15ba0 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f 0a  ion of views */.
15bb0 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
15bc0 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30  dFrom      0x020
15bd0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
15be0 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
15bf0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 0a 2f  OM clause */.../
15c00 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
15c10 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61 6e   of a select can
15c20 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
15c30 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2e  in several ways.
15c40 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20 70    The.** "SRT" p
15c50 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
15c60 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65 22  ECT Result Type"
15c70 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
15c80 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
15c90 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
15ca0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
15cb0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
15cc0 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
15cd0 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
15ce0 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
15cf0 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
15d00 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
15d10 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
15d20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
15d30 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
15d40 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
15d50 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
15d60 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
15d70 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
15d80 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
15d90 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
15da0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
15db0 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
15dc0 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
15dd0 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
15de0 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63 61  Dest)<=SRT_Disca
15df0 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  rd)..#define SRT
15e00 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35 20  _Output       5 
15e10 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
15e20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
15e30 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
15e40 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20            6  /* 
15e50 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
15e60 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
15e70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
15e80 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20            7  /* 
15e90 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
15ea0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
15eb0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
15ec0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38 20  _Table        8 
15ed0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
15ee0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
15ef0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
15f00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15f10 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20 20  EphemTab     9  
15f20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
15f30 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
15f40 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
15f50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15f60 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20 20  Coroutine   10  
15f70 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
15f80 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
15f90 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lt */../*.** An 
15fa0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
15fb0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
15fc0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
15fd0 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
15fe0 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
15ff0 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
16000 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
16010 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
16020 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
16030 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
16040 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
16050 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
16060 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
16070 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
16080 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
16090 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
160a0 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20 41  DParm;      /* A
160b0 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
160c0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
160d0 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
160e0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
160f0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
16100 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
16110 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
16120 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
16130 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16140 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
16150 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ocated */.};../*
16160 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
16170 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
16180 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
16190 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
161a0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
161b0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
161c0 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
161d0 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
161e0 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
161f0 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
16200 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
16210 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
16220 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
16230 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
16240 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
16250 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
16260 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
16270 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
16280 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
16290 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
162a0 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
162b0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
162c0 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
162d0 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
162e0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
162f0 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
16300 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
16310 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
16320 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
16330 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
16340 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
16350 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
16360 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
16370 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
16380 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
16390 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
163a0 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
163b0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
163c0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
163d0 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
163e0 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
163f0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
16400 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
16410 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
16420 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
16430 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
16440 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
16450 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16460 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
16470 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
16480 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
16490 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
164a0 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
164b0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
164c0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
164d0 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
164e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
164f0 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
16500 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
16510 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
16520 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
16530 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
16540 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
16550 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
16560 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
16570 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
16580 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
16590 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
165a0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
165b0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
165c0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
165d0 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
165e0 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
165f0 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
16600 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
16610 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
16620 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
16630 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
16640 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
16650 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
16660 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
16670 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
16680 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
16690 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
166a0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
166b0 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
166c0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
166d0 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
166e0 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
166f0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
16700 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
16710 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
16720 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
16730 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
16740 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
16750 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
16760 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
16770 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
16780 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
16790 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
167a0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
167b0 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
167c0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
167d0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
167e0 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
167f0 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
16800 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
16810 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
16820 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
16830 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
16840 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
16850 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
16860 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
16870 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
16880 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
16890 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
168a0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
168b0 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
168c0 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
168d0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
168e0 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
168f0 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
16900 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
16910 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
16920 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
16930 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
16940 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16960 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
16970 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
16980 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
16990 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
169a0 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
169b0 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
169c0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
169d0 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
169e0 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
169f0 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
16a00 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
16a10 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
16a20 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
16a30 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f 75  ypedef sqlite3_u
16a40 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23  int64 yDbMask;.#
16a50 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
16a60 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
16a70 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
16a80 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
16a90 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
16aa0 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
16ab0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
16ac0 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
16ad0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
16ae0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
16af0 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
16b00 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
16b10 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
16b20 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
16b30 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
16b40 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
16b50 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
16b60 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
16b70 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
16b80 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
16b90 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
16ba0 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
16bb0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
16bc0 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
16bd0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
16be0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
16bf0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
16c00 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
16c10 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
16c20 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
16c30 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
16c40 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
16c50 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
16c60 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
16c70 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
16c80 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
16c90 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
16ca0 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
16cb0 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
16cc0 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
16cd0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
16ce0 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
16cf0 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
16d00 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
16d10 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
16d20 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
16d30 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
16d40 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
16d50 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
16d60 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
16d70 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
16d80 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
16d90 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
16da0 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
16db0 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
16dc0 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
16dd0 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
16de0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
16df0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
16e00 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
16e10 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
16e20 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
16e30 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
16e40 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
16e50 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
16e60 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
16e70 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
16e80 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
16e90 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
16ea0 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
16eb0 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
16ec0 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
16ed0 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
16ee0 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
16ef0 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
16f00 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
16f10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
16f20 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
16f30 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
16f40 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
16f50 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
16f60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
16f70 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
16f80 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
16f90 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e 55  */.  u8 nTempInU
16fa0 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  se;       /* Num
16fb0 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67 5b  ber of aTempReg[
16fc0 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  ] currently chec
16fd0 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38 20  ked out */.  u8 
16fe0 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  nColCache;      
16ff0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17000 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61  ntries in aColCa
17010 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 43  che[] */.  u8 iC
17020 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
17030 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
17040 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f 20   aColCache[] to 
17050 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38 20  replace */.  u8 
17060 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
17070 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
17080 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
17090 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
170a0 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
170b0 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
170c0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
170d0 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
170e0 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
170f0 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  on */.  int aTem
17100 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
17110 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
17120 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17130 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
17140 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
17150 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
17160 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17170 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
17180 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
17190 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
171a0 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
171b0 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
171c0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
171d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
171e0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
171f0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
17200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17210 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
17220 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
17230 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
17240 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
17250 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17260 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
17270 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
17280 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
17290 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
172a0 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
172b0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
172c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
172d0 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
172e0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
172f0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63  o far */.  int c
17300 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
17310 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
17320 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
17330 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
17340 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  s */.  int iCach
17350 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
17360 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
17370 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
17380 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
17390 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
173a0 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
173b0 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
173c0 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
173d0 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
173e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
173f0 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
17400 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
17410 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
17420 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
17430 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17440 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
17450 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
17460 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
17470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
17480 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
17490 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
174a0 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
174b0 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
174c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
174d0 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
174e0 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
174f0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
17500 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
17510 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
17520 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
17530 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
17540 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
17550 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
17560 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
17570 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
17580 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
17590 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
175a0 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
175b0 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
175c0 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
175d0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
175e0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
175f0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
17600 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
17610 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
17620 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
17630 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
17640 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
17650 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f    int cookieGoto
17660 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
17670 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20  s of OP_Goto to 
17680 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72 20  cookie verifier 
17690 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  subroutine */.  
176a0 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b  int cookieValue[
176b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
176c0 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75  HED+2];  /* Valu
176d0 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f  es of cookies to
176e0 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74   verify */.  int
176f0 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
17700 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
17710 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
17720 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
17730 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
17740 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
17750 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
17760 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
17770 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
17780 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
17790 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
177a0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
177b0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
177c0 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
177d0 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
177e0 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
177f0 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
17800 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
17810 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  g parsed */.#ifn
17820 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17830 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
17840 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
17850 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17860 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
17870 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
17880 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
17890 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
178a0 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
178b0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
178c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
178d0 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
178e0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
178f0 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
17900 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
17910 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
17920 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
17930 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
17940 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
17950 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
17960 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
17970 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
17980 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
17990 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
179a0 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
179b0 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
179c0 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
179d0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
179e0 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
179f0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
17a00 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
17a10 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
17a20 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
17a30 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
17a40 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
17a50 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
17a60 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
17a70 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
17a80 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
17a90 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
17aa0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
17ab0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
17ac0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
17ad0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
17ae0 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
17af0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
17b00 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
17b10 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
17b20 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
17b30 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
17b40 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
17b50 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
17b60 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
17b70 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
17b80 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
17b90 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
17ba0 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
17bb0 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a  h recursion */..
17bc0 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17be0 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
17bf0 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
17c00 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
17c10 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17c30 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
17c40 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
17c50 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70  ar[] */.  u8 exp
17c60 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
17c70 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
17c80 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
17c90 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
17ca0 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
17cb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17cc0 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
17cd0 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
17ce0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
17cf0 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
17d00 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
17d10 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
17d20 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
17d30 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
17d40 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
17d50 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
17d60 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
17d70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17d80 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
17d90 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
17da0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
17db0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17dc0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
17dd0 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
17de0 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
17df0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
17e00 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
17e10 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
17e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
17e30 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
17e40 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
17e50 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
17e60 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
17e70 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
17e80 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
17e90 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
17ea0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
17eb0 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
17ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
17ed0 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
17ee0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
17ef0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
17f00 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
17f10 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
17f20 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
17f30 61 72 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20  are()) */.  int 
17f40 2a 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20  *aAlias;        
17f50 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
17f60 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  r used to hold a
17f70 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f  liased result */
17f80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
17f90 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
17fa0 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
17fb0 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
17fc0 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
17fd0 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
17fe0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
17ff0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
18000 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
18010 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
18020 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
18030 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
18040 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
18050 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
18060 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
18070 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
18080 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
18090 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
180a0 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
180b0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
180c0 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  eToken;         
180d0 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
180e0 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
180f0 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
18100 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
18110 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
18120 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
18130 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
18140 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18150 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
18160 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
18170 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
18180 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
18190 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
181a0 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
181b0 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
181c0 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
181d0 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
181e0 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
181f0 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
18200 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
18210 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
18220 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
18230 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
18240 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
18250 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
18260 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
18270 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
18280 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  /.};../*.** Retu
18290 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
182a0 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
182b0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
182c0 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
182d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
182e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
182f0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
18300 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
18310 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
18320 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
18330 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
18340 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
18350 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
18360 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
18370 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
18380 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
18390 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
183a0 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
183b0 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
183c0 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
183d0 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
183e0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
183f0 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
18400 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18410 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
18420 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
18430 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
18440 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
18450 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
18460 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
18470 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
18480 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
18490 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
184a0 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
184b0 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  es..*/.#define O
184c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
184d0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
184e0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
184f0 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
18500 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
18510 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
18520 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
18530 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
18540 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18550 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
18560 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
18570 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
18580 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
18590 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
185a0 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
185b0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
185c0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
185d0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
185e0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
185f0 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
18600 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
18610 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
18620 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
18630 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
18640 45 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  E    0x20    /* 
18650 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62  Clear pseudo-tab
18660 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43  le cache in OP_C
18670 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
18680 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
18690 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
186a0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
186b0 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
186c0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
186d0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
186e0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
186f0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
18700 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
18710 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18720 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
18730 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
18740 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
18750 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
18760 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
18770 49 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32  ISREG       0x02
18780 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
18790 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
187a0 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
187b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
187c0 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
187d0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
187e0 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
187f0 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a  tation */../*. *
18800 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
18810 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
18820 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
18830 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
18840 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
18850 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a  ct Trigger. . *.
18860 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
18870 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
18880 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
18890 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
188a0 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
188b0 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
188c0 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
188d0 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
188e0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
188f0 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
18900 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
18910 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
18920 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
18930 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
18940 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
18950 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
18960 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
18970 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
18980 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
18990 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
189a0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
189b0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
189c0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
189d0 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
189e0 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
189f0 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
18a00 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
18a10 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
18a20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
18a30 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
18a40 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
18a50 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
18a60 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
18a70 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
18a80 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
18a90 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
18aa0 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
18ab0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
18ac0 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
18ad0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
18ae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18af0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
18b00 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18b20 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
18b30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18b40 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
18b50 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
18b60 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
18b70 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
18b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
18b90 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
18ba0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
18bb0 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
18bc0 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
18bd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
18be0 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
18bf0 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
18c00 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
18c10 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
18c20 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
18c30 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
18c40 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
18c50 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
18c60 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
18c70 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
18c80 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
18c90 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
18ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18cc0 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
18cd0 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
18ce0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
18cf0 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
18d00 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
18d10 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
18d20 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
18d30 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
18d40 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
18d50 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
18d60 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
18d70 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
18d80 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
18d90 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
18da0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
18db0 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
18dc0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
18dd0 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
18de0 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
18df0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
18e00 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
18e10 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
18e20 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
18e30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
18e40 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
18e50 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a  ine which. .**.*
18e60 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
18e70 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
18e80 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
18e90 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
18ea0 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
18eb0 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
18ec0 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
18ed0 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
18ee0 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
18ef0 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
18f00 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
18f10 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
18f20 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
18f30 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
18f40 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
18f50 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
18f60 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
18f70 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
18f80 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
18f90 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e  ogram. . *. * In
18fa0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
18fb0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
18fc0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
18fd0 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
18fe0 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
18ff0 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
19000 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
19010 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
19020 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
19030 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  e . * associated
19040 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
19050 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
19060 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
19070 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
19080 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
19090 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
190a0 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a  er-program.. * .
190b0 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
190c0 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
190d0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
190e0 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
190f0 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
19100 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
19110 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
19120 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
19130 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
19140 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a  mined by the . *
19150 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
19160 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
19170 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
19180 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
19190 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
191a0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
191b0 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
191c0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
191d0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
191e0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
191f0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19210 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
19220 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
19230 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
19240 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74  rwise NULL.. * t
19250 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
19260 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
19270 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
19280 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
19290 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
192a0 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
192b0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
192c0 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
192d0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
192e0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
192f0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
19300 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
19310 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
19320 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
19330 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
19340 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
19350 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
19360 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
19370 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19380 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
19390 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
193a0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
193b0 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
193c0 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
193d0 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
193e0 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72  K_DELETE). * tar
193f0 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
19400 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
19410 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
19420 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
19430 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
19440 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
19450 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
19460 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
19470 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
19480 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
19490 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
194a0 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
194b0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
194c0 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
194d0 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
194e0 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
194f0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
19500 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a  date rows of.. *
19510 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
19520 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
19530 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
19540 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
19550 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
19560 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
19570 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
19580 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
19590 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
195a0 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
195b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
195c0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
195d0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
195e0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
195f0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
19600 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
19610 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
19620 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20     argument.. * 
19630 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
19640 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
19650 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
19660 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
19670 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
19680 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
19690 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
196a0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
196b0 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
196c0 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
196d0 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
196e0 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
196f0 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
19700 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
19710 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
19720 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
19730 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  tment or RHS of 
19740 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53  INSERT INTO .. S
19750 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54  ELECT ... */.  T
19760 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20  oken target;    
19770 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
19780 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
19790 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
197a0 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
197b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
197c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
197d0 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
197e0 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
197f0 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
19800 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
19810 66 6f 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c  for UPDATE.  VAL
19820 55 45 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49  UES clause for I
19830 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73  NSERT */.  IdLis
19840 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
19850 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
19860 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
19870 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
19880 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
19890 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
198a0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
198b0 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
198c0 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
198d0 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
198e0 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
198f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19900 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19910 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
19920 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
19930 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
19940 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
19950 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
19960 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
19970 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
19980 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
19990 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
199a0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
199b0 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
199c0 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
199d0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
199e0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
199f0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
19a00 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
19a10 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
19a20 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
19a30 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
19a40 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e   schema */.  con
19a50 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
19a60 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
19a70 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
19a80 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
19a90 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
19aa0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
19ab0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
19ac0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
19ad0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
19ae0 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
19af0 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
19b00 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
19b10 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
19b20 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
19b30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
19b40 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
19b50 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
19b60 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
19b70 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
19b80 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
19b90 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
19ba0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
19bb0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
19bc0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
19bd0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19be0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
19bf0 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
19c00 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
19c10 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
19c20 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
19c30 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
19c40 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
19c50 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
19c60 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
19c70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
19c80 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
19c90 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
19ca0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
19cb0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
19cc0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
19cd0 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
19ce0 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
19cf0 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
19d00 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
19d10 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
19d20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
19d30 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
19d40 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
19d50 20 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b     mallocFailed;
19d60 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72     /* Becomes tr
19d70 75 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79  ue if any memory
19d80 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c   allocation fail
19d90 73 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d  s */.  u8   useM
19da0 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30  alloc;      /* 0
19db0 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69  : none,  1: sqli
19dc0 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a  te3DbMalloc,  2:
19dd0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20   sqlite3_malloc 
19de0 2a 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67  */.  u8   tooBig
19df0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63  ;         /* Bec
19e00 6f 6d 65 73 20 74 72 75 65 20 69 66 20 73 74 72  omes true if str
19e10 69 6e 67 20 73 69 7a 65 20 65 78 63 65 65 64 73  ing size exceeds
19e20 20 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f   limits */.};../
19e30 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
19e40 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
19e50 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
19e60 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
19e70 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
19e80 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
19e90 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
19ea0 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
19eb0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
19ec0 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
19ed0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
19ee0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
19ef0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
19f00 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
19f10 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
19f20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
19f30 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
19f40 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
19f50 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
19f60 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
19f70 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
19f80 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
19f90 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
19fa0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
19fb0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
19fc0 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
19fd0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
19fe0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
19ff0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1a000 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
1a010 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
1a020 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
1a030 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
1a040 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
1a050 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1a060 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
1a070 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1a0a0 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
1a0b0 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
1a0c0 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
1a0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a0e0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
1a0f0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
1a100 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1a130 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
1a140 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
1a150 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
1a160 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a170 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
1a180 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
1a190 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
1a1a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a1b0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
1a1c0 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
1a1d0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
1a1e0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1a210 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1a220 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1a230 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1a240 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1a250 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1a260 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1a270 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a290 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1a2a0 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1a2b0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1a2c0 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1a2d0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1a2e0 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1a2f0 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1a300 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1a310 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1a320 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1a330 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1a340 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1a350 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1a360 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1a370 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1a380 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1a390 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1a3c0 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1a3d0 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1a400 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1a410 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1a420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1a430 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1a440 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1a450 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1a460 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1a470 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1a480 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1a490 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1a4a0 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1a4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1a4c0 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1a4d0 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1a4e0 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a500 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1a510 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1a520 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a530 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1a540 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1a550 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1a560 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1a570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a580 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1a590 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1a5a0 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a5c0 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1a5d0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1a5e0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1a5f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1a600 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1a610 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1a620 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1a650 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1a660 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1a670 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1a680 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1a690 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1a6a0 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1a6b0 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1a6c0 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1a6d0 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1a6e0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1a6f0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1a700 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1a710 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1a720 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1a730 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1a740 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1a750 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1a760 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1a770 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a790 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1a7a0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1a7b0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1a7c0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1a7f0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1a800 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1a810 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1a820 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a830 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1a840 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1a850 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1a860 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1a890 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1a8a0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1a8b0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1a8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a8d0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1a8e0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1a8f0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1a900 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1a910 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1a920 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1a930 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1a940 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1a950 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1a960 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a970 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1a980 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tex */.  void (*
1a990 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1a9a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1a9b0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1a9c0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1a9d0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1aa00 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20  t to xLog() */. 
1aa10 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1aa20 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1aa30 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1aa40 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1aa50 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  alls */.#ifdef S
1aa60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1aa70 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1aa80 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1aa90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1aaa0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1aab0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1aac0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  f.};../*.** Cont
1aad0 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1aae0 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1aaf0 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1ab00 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1ab10 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1ab20 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1ab30 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1ab40 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1ab50 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1ab60 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1ab70 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1ab80 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1ab90 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1aba0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1abb0 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
1abe0 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  t.  */.  int wal
1abf0 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ac20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
1ac30 75 38 20 62 53 65 6c 65 63 74 44 65 70 74 68 46  u8 bSelectDepthF
1ac40 69 72 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  irst;           
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
1ac60 73 75 62 71 75 65 72 69 65 73 20 66 69 72 73 74  subqueries first
1ac70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
1acb0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
1acc0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1acd0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1acf0 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
1ad00 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
1ad40 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  e */.    SrcList
1ad50 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad70 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
1ad80 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
1ad90 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
1ada0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
1adb0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
1adc0 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
1add0 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
1ade0 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1adf0 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1ae00 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1ae10 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1ae20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1ae30 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1ae40 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1ae50 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1ae60 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1ae70 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1ae80 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1ae90 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1aea0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1aeb0 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1aec0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1aed0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1aee0 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1aef0 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1af00 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1af10 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1af20 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1af30 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1af40 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1af50 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1af60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1af70 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1af80 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1af90 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1afa0 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1afb0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1afc0 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1afd0 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1afe0 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1aff0 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
1b000 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1b010 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
1b020 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
1b030 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
1b040 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
1b050 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
1b060 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
1b070 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
1b080 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
1b090 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1b0b0 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
1b0c0 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
1b0f0 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
1b100 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
1b110 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
1b120 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
1b160 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
1b170 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
1b180 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1b190 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
1b1a0 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
1b1b0 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
1b1c0 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
1b1d0 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
1b1e0 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
1b1f0 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
1b200 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
1b210 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
1b220 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
1b230 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
1b240 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
1b250 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
1b260 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
1b270 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
1b280 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
1b290 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
1b2a0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1b2b0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
1b2c0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1b2d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1b2e0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
1b2f0 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
1b300 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
1b310 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1b320 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1b330 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
1b340 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
1b350 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
1b360 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1b370 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
1b380 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
1b390 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
1b3a0 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
1b3b0 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
1b3c0 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
1b3d0 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
1b3e0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
1b3f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
1b400 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
1b410 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
1b420 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65   also all.** the
1b430 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1b440 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
1b450 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20  ve as an alisse 
1b460 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
1b470 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
1b480 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1b490 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
1b4a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1b4b0 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
1b4c0 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
1b4d0 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS3.#endif../
1b4e0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
1b4f0 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
1b500 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
1b510 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
1b520 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
1b530 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
1b540 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
1b550 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
1b560 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1b570 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
1b580 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
1b590 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1b5a0 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
1b5b0 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
1b5c0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
1b5d0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
1b5e0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1b5f0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
1b600 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
1b610 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1b620 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
1b630 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
1b640 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
1b650 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
1b660 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
1b670 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
1b680 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
1b690 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
1b6a0 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
1b6b0 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
1b6c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
1b6d0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
1b6e0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
1b6f0 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
1b700 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1b710 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
1b720 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b730 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
1b740 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b750 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b760 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
1b770 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1b780 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b790 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b7a0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
1b7b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b7c0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
1b7d0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b7e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b7f0 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
1b800 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1b810 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b820 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b830 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
1b840 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b850 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
1b860 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b870 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b880 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
1b890 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1b8a0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
1b8b0 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
1b8c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
1b8d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1b8e0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
1b8f0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
1b900 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1b910 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1b920 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
1b930 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
1b940 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1b950 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1b960 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
1b970 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1b980 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b990 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
1b9a0 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
1b9b0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1b9c0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1b9d0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
1b9e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b9f0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1ba00 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1ba10 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
1ba20 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1ba30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
1ba40 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
1ba50 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
1ba60 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )(x)).#endif../*
1ba70 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
1ba80 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
1ba90 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
1baa0 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
1bab0 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
1bac0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
1bad0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
1bae0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
1baf0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
1bb00 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
1bb10 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
1bb20 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1bb30 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
1bb40 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
1bb50 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1bb60 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
1bb70 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  ro(int);.void *s
1bb80 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1bb90 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ro(sqlite3*, int
1bba0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bbb0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
1bbc0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
1bbd0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
1bbe0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1bbf0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
1bc00 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
1bc10 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1bc20 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  har*, int);.void
1bc30 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
1bc40 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f  (void*, int);.vo
1bc50 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
1bc60 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
1bc70 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  e3 *, void *, in
1bc80 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1bc90 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
1bca0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  e3 *, void *, in
1bcb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1bcc0 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
1bcd0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
1bce0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
1bcf0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1bd00 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
1bd10 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
1bd20 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
1bd30 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
1bd40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
1bd50 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
1bd60 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
1bd70 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
1bd80 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
1bd90 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
1bda0 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
1bdb0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
1bdc0 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
1bdd0 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
1bde0 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
1bdf0 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
1be00 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
1be10 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
1be20 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
1be30 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
1be40 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
1be50 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
1be60 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
1be70 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
1be80 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
1be90 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
1bea0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
1beb0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
1bec0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
1bed0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
1bee0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
1bef0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
1bf00 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
1bf10 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
1bf20 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
1bf30 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1bf40 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
1bf50 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
1bf60 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1bf70 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
1bf80 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1bf90 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1bfa0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
1bfb0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1bfc0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1bfd0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
1bfe0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
1bff0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1c000 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
1c010 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c020 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1c030 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
1c040 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
1c050 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c060 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
1c070 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
1c080 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
1c090 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1c0a0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
1c0b0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1c0c0 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
1c0d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1c0e0 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
1c0f0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
1c100 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
1c110 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
1c120 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1c130 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
1c140 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
1c150 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1c160 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
1c170 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
1c180 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
1c190 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
1c1a0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1c1b0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
1c1c0 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
1c1d0 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
1c1e0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1c1f0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
1c200 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
1c210 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
1c220 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
1c230 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
1c240 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
1c250 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
1c260 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
1c270 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  oid);.#endif..in
1c280 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  t sqlite3StatusV
1c290 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
1c2a0 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64  sqlite3StatusAdd
1c2b0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
1c2c0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
1c2d0 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  t(int, int);..#i
1c2e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c2f0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
1c300 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
1c310 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
1c320 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1c330 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
1c340 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
1c350 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
1c360 63 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ccum*, int, cons
1c370 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
1c380 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1c390 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69  E_OMIT_TRACE.voi
1c3a0 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
1c3b0 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
1c3c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1c3d0 65 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69  endif.char *sqli
1c3e0 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
1c3f0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1c400 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
1c410 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
1c420 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1c430 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
1c440 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e  r *sqlite3MAppen
1c450 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72  df(sqlite3*,char
1c460 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
1c470 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .);.#if defined(
1c480 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
1c490 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1c4a0 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
1c4b0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
1c4c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1c4d0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
1c4e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1c4f0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
1c500 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
1c510 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
1c520 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20  ndif../* Output 
1c530 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53  formatting for S
1c540 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45  QLITE_TESTCTRL_E
1c550 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65  XPLAIN */.#if de
1c560 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c570 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e  BLE_TREE_EXPLAIN
1c580 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1c590 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62  ExplainBegin(Vdb
1c5a0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1c5b0 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66  te3ExplainPrintf
1c5c0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
1c5d0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69  ar*, ...);.  voi
1c5e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c5f0 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  NL(Vdbe*);.  voi
1c600 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c610 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  Push(Vdbe*);.  v
1c620 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c630 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20  inPop(Vdbe*);.  
1c640 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1c650 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29  ainFinish(Vdbe*)
1c660 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1c670 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64  ExplainSelect(Vd
1c680 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20  be*, Select*);. 
1c690 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1c6a0 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20  lainExpr(Vdbe*, 
1c6b0 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
1c6c0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1c6d0 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70  rList(Vdbe*, Exp
1c6e0 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74  rList*);.  const
1c6f0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64   char *sqlite3Vd
1c700 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64  beExplanation(Vd
1c710 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  be*);.#else.# de
1c720 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1c730 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65  ainBegin(X).# de
1c740 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1c750 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23  ainSelect(A,B).#
1c760 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1c770 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a  xplainExpr(A,B).
1c780 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c790 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28  ExplainExprList(
1c7a0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1c7b0 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69  lite3ExplainFini
1c7c0 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  sh(X).# define s
1c7d0 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1c7e0 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69  ation(X) 0.#endi
1c7f0 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
1c800 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
1c810 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
1c820 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1c830 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
1c840 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
1c850 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1c860 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
1c870 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
1c880 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
1c890 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
1c8a0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
1c8b0 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
1c8c0 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
1c8d0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
1c8e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
1c8f0 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
1c900 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
1c910 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
1c920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1c930 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
1c940 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
1c950 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
1c960 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
1c970 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1c980 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
1c990 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
1c9a0 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
1c9b0 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
1c9c0 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
1c9d0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
1c9e0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
1c9f0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
1ca00 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
1ca10 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1ca20 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1ca30 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
1ca40 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
1ca50 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
1ca60 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
1ca70 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
1ca80 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
1ca90 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
1caa0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1cab0 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
1cac0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
1cad0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1cae0 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
1caf0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
1cb00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cb10 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
1cb20 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
1cb30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cb40 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
1cb50 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
1cb60 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
1cb70 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
1cb80 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
1cb90 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1cba0 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
1cbb0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
1cbc0 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
1cbd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cbe0 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
1cbf0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
1cc00 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
1cc10 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
1cc20 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
1cc30 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1cc40 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
1cc50 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
1cc60 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1cc70 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
1cc80 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
1cc90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1cca0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
1ccb0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
1ccc0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1ccd0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
1cce0 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
1ccf0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1cd00 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
1cd10 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
1cd20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cd30 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
1cd40 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
1cd50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
1cd60 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
1cd70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cd80 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
1cd90 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
1cda0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1cdb0 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
1cdc0 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
1cdd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
1cde0 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
1cdf0 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  arse *, int);.vo
1ce00 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
1ce10 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
1ce20 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
1ce30 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
1ce40 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
1ce50 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
1ce60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1ce70 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
1ce80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ce90 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
1cea0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1ceb0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
1cec0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ced0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
1cee0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
1cef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1cf00 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
1cf10 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1cf20 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
1cf30 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
1cf40 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
1cf50 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
1cf60 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
1cf70 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1cf80 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
1cf90 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1cfa0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  *,Select*);.int 
1cfb0 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
1cfc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
1cfd0 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
1cfe0 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
1cff0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1d000 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
1d010 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
1d020 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
1d030 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
1d040 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
1d050 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
1d060 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76  (Parse *);..Bitv
1d070 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
1d080 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
1d090 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
1d0a0 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
1d0b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1d0c0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
1d0d0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
1d0e0 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
1d0f0 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
1d100 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1d110 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
1d120 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
1d130 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
1d140 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c  itvec*);.int sql
1d150 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
1d160 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
1d170 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
1d180 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
1d190 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73  te3*, void*, uns
1d1a0 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64  igned int);.void
1d1b0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
1d1c0 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f  ear(RowSet*);.vo
1d1d0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
1d1e0 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
1d1f0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1d200 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
1d210 65 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20  et*, u8 iBatch, 
1d220 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1d230 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
1d240 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
1d250 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
1d260 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
1d270 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d280 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
1d290 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
1d2a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
1d2b0 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
1d2c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1d2d0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
1d2e0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1d2f0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
1d300 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
1d310 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
1d320 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
1d330 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
1d340 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1d350 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
1d360 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
1d370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d380 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
1d390 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1d3a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d3b0 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
1d3c0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
1d3d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1d3e0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1d3f0 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
1d400 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1d410 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
1d420 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
1d430 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
1d440 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
1d450 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
1d460 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
1d470 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
1d480 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d490 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
1d4a0 64 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d(X).#endif.int 
1d4b0 73 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75  sqlite3CodeCorou
1d4c0 74 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c  tine(Parse*, Sel
1d4d0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
1d4e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d4f0 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
1d500 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
1d510 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
1d520 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
1d530 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
1d540 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
1d550 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
1d560 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
1d570 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
1d580 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
1d590 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
1d5a0 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
1d5b0 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
1d5c0 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
1d5d0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1d5e0 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
1d5f0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
1d600 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
1d610 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1d620 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
1d630 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1d640 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
1d650 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1d660 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
1d670 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
1d680 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
1d690 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
1d6c0 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
1d6d0 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1d6e0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
1d6f0 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
1d700 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
1d710 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  en *);.int sqlit
1d720 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
1d730 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
1d740 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
1d750 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1d760 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1d770 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
1d780 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1d790 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
1d7a0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1d7b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1d7c0 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
1d7d0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
1d7e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1d7f0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1d800 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
1d810 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
1d820 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
1d830 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
1d840 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
1d850 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74       Token*, int
1d880 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d890 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61  ite3DropIndex(Pa
1d8a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1d8b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1d8c0 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
1d8d0 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
1d8e0 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  est*);.Select *s
1d8f0 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28  qlite3SelectNew(
1d900 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1d910 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
1d920 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ExprList*,.     
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69      Expr*,ExprLi
1d950 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78  st*,u16,Expr*,Ex
1d960 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1d970 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
1d980 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
1d990 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1d9a0 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
1d9b0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1d9c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
1d9d0 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
1d9e0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
1d9f0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
1da00 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
1da10 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
1da20 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
1da30 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1da40 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
1da50 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
1da60 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1da70 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
1da80 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
1da90 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
1daa0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1dab0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1dac0 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  *,char*);.#endif
1dad0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
1dae0 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20  eteFrom(Parse*, 
1daf0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  SrcList*, Expr*)
1db00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
1db10 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
1db20 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1db30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57  , Expr*, int);.W
1db40 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65  hereInfo *sqlite
1db50 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73  3WhereBegin(Pars
1db60 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
1db70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1db80 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a  List*,u16,int);.
1db90 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
1dba0 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
1dbb0 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65  ;.u64 sqlite3Whe
1dbc0 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
1dbd0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1dbe0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1dbf0 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
1dc00 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1dc10 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
1dc20 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1dc30 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
1dc40 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
1dc50 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
1dc60 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
1dc70 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
1dc80 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
1dc90 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
1dca0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1dcb0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
1dcc0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
1dcd0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1dce0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
1dcf0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
1dd00 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
1dd10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1dd20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1dd30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1dd40 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
1dd50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1dd60 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1dd70 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
1dd80 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1dd90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1dda0 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
1ddb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ddc0 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
1ddd0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1dde0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
1ddf0 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
1de00 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1de10 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
1de20 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
1de30 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1de40 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
1de50 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1de60 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1de70 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
1de80 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
1de90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1dea0 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
1deb0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
1dec0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
1ded0 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
1dee0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1def0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
1df00 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
1df10 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
1df20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
1df30 6f 6e 73 74 61 6e 74 73 28 50 61 72 73 65 2a 2c  onstants(Parse*,
1df40 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1df50 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
1df60 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
1df70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
1df80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1df90 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
1dfa0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
1dfb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1dfc0 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
1dfd0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1dfe0 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
1dff0 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
1e000 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e010 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1e020 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e030 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
1e040 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f  e*,int isView,co
1e050 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1e060 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1e070 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1e080 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e  leItem(Parse*,in
1e090 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20  t isView,struct 
1e0a0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1e0b0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
1e0c0 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
1e0d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
1e0e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1e0f0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
1e100 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
1e110 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1e120 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1e130 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1e140 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
1e150 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1e160 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e170 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b  3Vacuum(Parse*);
1e180 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
1e190 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
1e1a0 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73  lite3*);.char *s
1e1b0 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
1e1c0 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
1e1d0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1e1e0 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78  e3ExprCompare(Ex
1e1f0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  pr*, Expr*);.int
1e200 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1e210 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
1e220 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
1e230 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1e240 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
1e250 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
1e260 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1e270 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
1e280 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
1e290 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
1e2a0 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
1e2b0 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
1e2c0 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
1e2d0 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
1e2e0 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Vdbe(Parse*);.vo
1e2f0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
1e300 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
1e310 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
1e320 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
1e330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1e340 72 6e 67 52 65 73 65 74 53 74 61 74 65 28 76 6f  rngResetState(vo
1e350 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1e360 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
1e370 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
1e380 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1e390 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
1e3a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e3b0 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
1e3c0 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
1e3d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1e3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1e3f0 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
1e400 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1e410 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
1e420 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1e430 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e440 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
1e450 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1e460 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
1e470 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
1e480 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1e490 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
1e4a0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
1e4b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
1e4c0 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
1e4d0 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
1e4e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e4f0 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
1e500 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e510 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
1e520 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
1e530 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1e540 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
1e550 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1e560 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
1e570 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
1e580 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e590 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
1e5a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1e5b0 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e 75 6c  te3ExprCodeIsNul
1e5c0 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63 6f 6e  lJump(Vdbe*, con
1e5d0 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  st Expr*, int, i
1e5e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e5f0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
1e600 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
1e610 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
1e620 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
1e630 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
1e640 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1e650 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
1e660 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1e670 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72 69 67  , int, int, Trig
1e680 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ger *, int);.voi
1e690 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
1e6a0 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
1e6b0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1e6c0 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  int, int*);.int 
1e6d0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
1e6e0 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
1e6f0 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
1e700 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e710 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
1e720 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
1e730 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
1e740 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 20 20 20 20 20 20 20 20 69 6e 74 2a 2c 69 6e           int*,in
1e770 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  t,int,int,int,in
1e780 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1e790 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
1e7a0 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  on(Parse*, Table
1e7b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e7c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e7d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
1e7e0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
1e7f0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
1e800 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e810 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
1e820 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
1e830 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1e840 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
1e850 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
1e860 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
1e870 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
1e880 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
1e890 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
1e8a0 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
1e8b0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
1e8c0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
1e8d0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
1e8e0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
1e8f0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
1e900 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
1e910 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
1e920 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
1e930 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
1e940 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
1e950 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
1e960 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
1e970 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
1e980 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
1e990 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
1e9a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1e9b0 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
1e9c0 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
1e9d0 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
1e9e0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
1e9f0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
1ea00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
1ea10 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
1ea20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1ea30 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
1ea40 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1ea50 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1ea60 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
1ea70 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
1ea80 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
1ea90 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
1eaa0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
1eab0 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
1eac0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1ead0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
1eae0 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
1eaf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
1eb00 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
1eb10 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
1eb20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1eb30 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
1eb40 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1eb50 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
1eb60 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
1eb70 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
1eb80 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1eb90 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
1eba0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1ebb0 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
1ebc0 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
1ebd0 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
1ebe0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1ebf0 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
1ec00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1ec20 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
1ec30 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1ec40 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
1ec50 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
1ec60 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
1ec70 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1ec80 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
1ec90 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
1eca0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1ecb0 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
1ecc0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
1ecd0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1ece0 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
1ecf0 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
1ed00 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
1ed10 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
1ed20 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
1ed30 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
1ed40 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
1ed50 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1ed60 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1ed70 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
1ed80 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
1ed90 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
1edc0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1edd0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1ede0 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
1edf0 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
1ee00 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
1ee10 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1ee20 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
1ee30 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1ee40 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
1ee50 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
1ee60 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1ee70 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
1ee80 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
1ee90 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1eea0 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
1eeb0 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
1eec0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
1eed0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1eee0 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
1eef0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1ef00 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65      ExprList*,Se
1ef40 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
1ef50 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1ef60 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
1ef70 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1ef80 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
1ef90 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
1efa0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1efb0 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
1efc0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1efd0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
1efe0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1eff0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1f000 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
1f010 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1f020 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1f030 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1f040 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
1f050 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
1f060 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
1f070 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
1f080 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
1f090 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
1f0a0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
1f0b0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
1f0c0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
1f0d0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
1f0e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1f0f0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
1f100 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
1f110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f120 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
1f130 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1f140 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1f150 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
1f160 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1f170 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
1f180 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
1f190 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1f1a0 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
1f1b0 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
1f1c0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1f1d0 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
1f1e0 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
1f1f0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
1f200 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
1f210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1f220 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
1f230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f240 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1f250 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
1f260 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1f270 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
1f280 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
1f290 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
1f2a0 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
1f2b0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1f2c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
1f2d0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
1f2e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f2f0 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
1f300 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
1f310 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f320 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
1f330 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
1f340 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
1f350 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
1f360 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
1f370 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
1f380 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
1f390 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1f3a0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1f3b0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1f3c0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
1f3d0 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
1f3e0 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
1f3f0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1f400 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1f410 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
1f420 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1f430 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
1f440 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
1f450 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
1f460 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
1f470 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1f480 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
1f490 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1f4a0 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
1f4b0 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
1f4c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f4d0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
1f4e0 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
1f4f0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1f500 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
1f510 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
1f520 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
1f530 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
1f540 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
1f550 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
1f560 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1f570 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49  .int sqlite3FixI
1f580 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
1f590 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
1f5a0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
1f5b0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1f5c0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
1f5d0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
1f5e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f5f0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
1f600 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1f610 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
1f620 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
1f630 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
1f640 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
1f650 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1f660 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
1f670 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
1f680 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1f690 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
1f6a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
1f6b0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
1f6c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1f6d0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
1f6e0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
1f6f0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
1f700 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1f710 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
1f720 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
1f730 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
1f740 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
1f750 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
1f760 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
1f770 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
1f780 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
1f790 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  u8**);../*.** Ro
1f7a0 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
1f7b0 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
1f7c0 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
1f7d0 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
1f7e0 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
1f7f0 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
1f800 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
1f810 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
1f820 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
1f830 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20  e.  Code should 
1f840 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  use the MACRO fo
1f850 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68  rms below, as th
1f860 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73 69  e Varint32 versi
1f870 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64  ons.** are coded
1f880 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73   to assume the s
1f890 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65 20  ingle byte case 
1f8a0 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c  is already handl
1f8b0 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68  ed (which .** th
1f8c0 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65  e MACRO form doe
1f8d0 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  s)..*/.int sqlit
1f8e0 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
1f8f0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
1f900 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  ;.int sqlite3Put
1f910 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65  Varint32(unsigne
1f920 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75  d char*, u32);.u
1f930 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
1f940 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
1f950 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
1f960 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
1f970 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
1f980 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
1f990 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
1f9a0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
1f9b0 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68  v);../*.** The h
1f9c0 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72  eader of a recor
1f9d0 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  d consists of a 
1f9e0 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c  sequence variabl
1f9f0 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
1fa00 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65  s..** These inte
1fa10 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20  gers are almost 
1fa20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64  always small and
1fa30 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
1fa40 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a  a single byte..*
1fa50 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1fa60 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61  macros take adva
1fa70 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20  ntage this fact 
1fa80 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73  to provide a fas
1fa90 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20  t encode.** and 
1faa0 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e  decode of the in
1fab0 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f  tegers in a reco
1fac0 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69  rd header.  It i
1fad0 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65  s faster for the
1fae0 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20   common.** case 
1faf0 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65  where the intege
1fb00 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79  r is a single by
1fb10 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74  te.  It is a lit
1fb20 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20  tle slower when 
1fb30 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
1fb40 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79  s two or more by
1fb50 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c  tes.  But overal
1fb60 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a  l it is faster..
1fb70 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
1fb80 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
1fb90 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1fba0 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  **.**     x = sq
1fbb0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
1fbc0 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20  ( A, &B );.**   
1fbd0 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74    x = sqlite3Put
1fbe0 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
1fbf0 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  ;.**.**     x = 
1fc00 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  getVarint32( A, 
1fc10 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
1fc20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  putVarint32( A, 
1fc30 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  B );.**.*/.#defi
1fc40 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
1fc50 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
1fc60 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
1fc70 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
1fc80 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1fc90 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
1fca0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
1fcb0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
1fcc0 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
1fcd0 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
1fce0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
1fcf0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
1fd00 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
1fd10 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
1fd20 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
1fd30 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
1fd40 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
1fd50 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
1fd60 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
1fd70 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
1fd80 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
1fd90 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f   *, Index *);.vo
1fda0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
1fdb0 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
1fdc0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61  *, Table *);.cha
1fdd0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
1fde0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
1fdf0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
1fe00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
1fe10 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
1fe20 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
1fe30 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
1fe40 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
1fe50 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
1fe60 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
1fe70 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
1fe80 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
1fe90 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1fea0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20  Error(sqlite3*, 
1feb0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
1fec0 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,...);.void *sql
1fed0 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
1fee0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
1fef0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
1ff00 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
1ff10 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
1ff20 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
1ff30 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
1ff40 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
1ff50 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
1ff60 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ff70 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
1ff80 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
1ff90 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
1ffa0 45 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45  E_DEBUG_OS_TRACE
1ffb0 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
1ffc0 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
1ffd0 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
1ffe0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
1fff0 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
20000 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
20010 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
20020 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
20030 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
20040 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
20050 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
20060 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20070 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
20080 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
20090 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
200a0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
200b0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
200c0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
200d0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
200e0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
200f0 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
20100 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
20110 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
20120 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
20130 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
20140 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
20150 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
20160 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
20170 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
20180 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
20190 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
201a0 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
201b0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
201c0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
201d0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
201e0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
201f0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
20200 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
20210 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
20220 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
20230 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
20240 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20250 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
20260 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
20270 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
20280 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20290 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
202a0 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
202b0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
202c0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
202d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
202e0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
202f0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
20300 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
20310 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b  st char *z,int);
20320 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
20330 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
20340 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
20350 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
20360 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
20370 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
20380 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20390 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
203a0 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
203b0 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
203e0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
203f0 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
20400 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
20410 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
20420 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
20430 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
20440 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
20450 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
20460 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
20470 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20480 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63 68 61 72  NABLE_STAT3.char
20490 20 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f 31   *sqlite3Utf8to1
204a0 36 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38 2c  6(sqlite3 *, u8,
204b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
204c0 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  t *);.#endif.int
204d0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
204e0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
204f0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
20500 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
20510 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20520 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
20530 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
20540 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
20550 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
20560 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
20570 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20580 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
20590 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
205a0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
205b0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
205c0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
205d0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
205e0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
205f0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
20600 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
20610 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
20620 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
20630 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
20640 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
20650 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
20660 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
20670 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
20680 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
20690 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
206a0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
206b0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
206c0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
206d0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
206e0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
206f0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
20700 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
20710 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
20720 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
20730 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
20740 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
20750 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
20760 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
20770 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
20780 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
20790 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
207a0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
207b0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
207c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
207d0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
207e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
207f0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
20800 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
20810 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
20820 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
20830 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
20840 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
20850 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20860 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
20870 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
20880 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
20890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
208a0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
208b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
208c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
208d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
208e0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
208f0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
20900 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
20910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
20920 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
20930 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
20940 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
20950 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
20960 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
20970 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
20980 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
20990 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
209a0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
209b0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
209c0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
209d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
209e0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
209f0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
20a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20a10 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
20a20 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
20a30 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
20a40 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
20a50 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
20a60 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
20a70 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
20a80 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
20a90 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
20aa0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
20ab0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
20ac0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
20ad0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
20ae0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
20af0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
20b00 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
20b10 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
20b20 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
20b30 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
20b40 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
20b50 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
20b60 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
20b70 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
20b80 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
20b90 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
20ba0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
20bb0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
20bc0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
20bd0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
20be0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
20bf0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
20c00 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
20c10 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
20c20 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
20c30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20c40 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
20c50 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
20c60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20c70 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
20c80 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
20c90 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
20ca0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
20cb0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
20cc0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
20cd0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
20ce0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
20cf0 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e  qlite3IndexKeyin
20d00 66 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65  fo(Parse *, Inde
20d10 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  x *);.int sqlite
20d20 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
20d30 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
20d40 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
20d50 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28  oid *, .  void (
20d60 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
20d70 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
20d80 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
20d90 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
20da0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
20db0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
20dc0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
20dd0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
20de0 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
20df0 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73  tructor.);.int s
20e00 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
20e10 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
20e20 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
20e30 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
20e40 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
20e50 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
20e60 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72  (StrAccum*, char
20e70 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
20e80 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
20e90 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
20ea0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
20eb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20ec0 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74 72  3AppendSpace(Str
20ed0 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61  Accum*,int);.cha
20ee0 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
20ef0 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
20f00 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
20f10 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
20f20 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
20f30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
20f40 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
20f50 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
20f60 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
20f70 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
20f80 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
20f90 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
20fa0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
20fb0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
20fc0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
20fd0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
20fe0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
20ff0 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
21000 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  u8 *);../*.** Th
21010 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21020 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
21030 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
21040 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
21050 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
21060 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
21070 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
21080 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
21090 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
210a0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
210b0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
210c0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
210d0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
210e0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
210f0 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
21100 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
21110 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21120 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
21130 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
21140 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
21150 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
21160 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
21170 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
21180 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
21190 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
211a0 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
211b0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
211c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
211d0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
211e0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
211f0 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
21200 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
21210 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
21220 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
21230 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
21240 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
21250 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
21260 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
21270 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
21280 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
21290 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
212a0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
212b0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
212c0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
212d0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
212e0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
212f0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21300 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
21310 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
21320 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
21330 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21340 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
21350 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
21360 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
21370 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
21380 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
21390 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
213a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
213b0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
213c0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
213d0 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
213e0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
213f0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
21400 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
21410 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
21420 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
21430 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
21440 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
21450 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
21460 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
21470 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
21480 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
21490 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
214a0 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20  b, char **);.   
214b0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
214c0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
214d0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
214e0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
214f0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
21500 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21510 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
21520 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
21530 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
21540 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
21550 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
21560 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
21570 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
21580 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
21590 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
215a0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
215b0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
215c0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
215d0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
215e0 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
215f0 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
21600 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
21610 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ==0).#endif.void
21620 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
21630 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
21640 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
21650 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
21660 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
21670 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
21680 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
21690 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
216a0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
216b0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
216c0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
216d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
216e0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
216f0 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
21700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
21710 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
21720 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
21730 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
21740 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
21750 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
21760 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
21770 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
21780 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
21790 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
217a0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
217b0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
217c0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
217d0 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
217e0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
217f0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
21800 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
21810 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
21820 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
21830 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
21840 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
21850 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
21860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
21870 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
21880 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
21890 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
218a0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
218b0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
218c0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
218d0 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  mt *);.int sqlit
218e0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
218f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21900 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
21910 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
21920 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
21930 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
21940 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
21950 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
21960 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
21970 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
21980 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
21990 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
219a0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
219b0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
219c0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
219d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
219e0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
219f0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
21a00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
21a10 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
21a20 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
21a30 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
21a40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
21a50 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  t);.#endif../* D
21a60 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
21a70 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
21a80 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
21a90 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
21aa0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
21ab0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
21ac0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
21ad0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
21ae0 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
21af0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
21b00 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
21b10 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
21b20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
21b30 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
21b40 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
21b50 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
21b60 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
21b70 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
21b80 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
21b90 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
21ba0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
21bb0 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69  ity is .** provi
21bc0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
21bd0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
21be0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
21bf0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
21c00 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
21c10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21c20 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
21c30 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
21c40 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
21c50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
21c60 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
21c70 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
21c80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
21c90 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
21ca0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
21cb0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
21cc0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
21cd0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
21ce0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
21cf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
21d00 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
21d10 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
21d20 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
21d30 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
21d40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
21d50 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
21d60 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
21d70 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
21d80 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
21d90 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64  ns(a,b,c,d).  #d
21da0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
21db0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20  heck(a,b,c,d).  
21dc0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21dd0 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
21de0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
21df0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
21e00 29 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69  )      0.  #defi
21e10 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
21e20 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a  ired(a,b,c,d) 0.
21e30 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
21e40 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
21e50 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
21e60 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
21e70 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
21e80 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
21e90 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
21ea0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
21eb0 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
21ec0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
21ed0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
21ee0 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
21ef0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
21f00 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
21f10 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
21f20 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
21f30 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
21f40 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
21f50 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
21f60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
21f70 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
21f80 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
21f90 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
21fa0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
21fb0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
21fc0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21fd0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
21fe0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
21ff0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
22000 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
22010 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
22020 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
22030 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22040 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
22050 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
22060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22070 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
22080 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
22090 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
220a0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
220b0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
220c0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
220d0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
220e0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
220f0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
22100 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
22110 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
22120 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
22130 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
22140 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
22150 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
22160 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
22170 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
22180 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20        3.#define 
22190 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
221a0 45 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20 73  ESC      4.int s
221b0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
221c0 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
221d0 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65  *, int*);..#ifde
221e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
221f0 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69  ATOMIC_WRITE.  i
22200 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
22210 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66  lOpen(sqlite3_vf
22220 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
22230 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  *, sqlite3_file 
22240 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
22250 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
22260 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
22270 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  fs *);.  int sql
22280 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
22290 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
222a0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
222b0 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71  JournalExists(sq
222c0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
222d0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
222e0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
222f0 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
22300 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64  ->szOsFile).  #d
22310 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
22320 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a  rnalExists(p) 1.
22330 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
22340 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
22350 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
22360 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
22370 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f  emJournalSize(vo
22380 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
22390 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c  IsMemJournal(sql
223a0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23  ite3_file *);..#
223b0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
223c0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f 69  PR_DEPTH>0.  voi
223d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
223e0 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70 50  Height(Parse *pP
223f0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
22400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
22410 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
22420 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
22430 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
22440 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
22450 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
22460 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53  ine sqlite3ExprS
22470 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20 20  etHeight(x,y).  
22480 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
22490 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
224a0 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
224b0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
224c0 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
224d0 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
224e0 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
224f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
22500 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
22510 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22520 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
22530 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
22540 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
22550 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
22560 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
22570 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
22580 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
22590 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
225a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
225b0 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
225c0 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
225d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
225e0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
225f0 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
22600 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
22610 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
22620 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22630 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
22640 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
22650 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
22660 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
22670 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
22680 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
22690 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
226a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
226b0 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
226c0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
226d0 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
226e0 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
226f0 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
22700 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
22710 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
22720 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
22730 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53  es. .*/.#ifdef S
22740 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
22750 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
22760 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
22770 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
22780 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
22790 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
227a0 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
227b0 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
227c0 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73 71  EXTERN void (*sq
227d0 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
227e0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
227f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
22800 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
22810 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
22820 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
22830 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
22840 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
22850 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
22860 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
22870 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
22880 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
22890 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
228a0 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
228b0 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
228c0 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
228d0 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
228e0 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
228f0 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
22900 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
22910 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
22920 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
22930 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
22940 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
22950 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
22960 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
22970 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
22980 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
22990 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
229a0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
229b0 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
229c0 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
229d0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
229e0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
229f0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
22a00 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
22a10 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
22a20 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
22a30 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
22a40 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
22a50 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
22a60 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
22a70 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
22a80 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
22a90 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
22aa0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
22ab0 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
22ac0 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
22ad0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
22ae0 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
22af0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
22b00 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
22b10 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
22b20 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
22b30 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
22b40 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
22b50 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
22b60 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
22b70 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
22b80 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
22b90 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
22ba0 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
22bb0 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
22bc0 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
22bd0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
22be0 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
22bf0 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
22c00 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
22c10 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
22c20 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
22c30 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
22c40 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
22c50 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
22c60 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
22c70 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
22c80 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
22c90 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
22ca0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
22cb0 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
22cc0 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
22cd0 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
22ce0 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
22cf0 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
22d00 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
22d10 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
22d20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a   constraint. .**
22d30 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
22d40 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
22d50 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
22d60 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
22d70 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
22d80 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
22d90 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
22da0 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
22db0 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
22dc0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
22dd0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
22de0 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
22df0 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
22e00 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
22e10 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
22e20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
22e30 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
22e40 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
22e50 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
22e60 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
22e70 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
22e80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
22e90 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
22ea0 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
22eb0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
22ec0 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
22ed0 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
22ee0 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
22ef0 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
22f00 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
22f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
22f20 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
22f30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68 61  x02  /* Might ha
22f40 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
22f50 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66  e memory */.#def
22f60 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41  ine MEMTYPE_SCRA
22f70 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20  TCH    0x04  /* 
22f80 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69  Scratch allocati
22f90 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
22fa0 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
22fb0 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20    0x08  /* Page 
22fc0 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
22fd0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
22fe0 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20 20  TYPE_DB         
22ff0 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73 71  0x10  /* Uses sq
23000 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e  lite3DbMalloc, n
23010 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  ot sqlite_malloc
23020 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f   */..#endif /* _
23030 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.