/ Hex Artifact Content
Login

Artifact 0d76a0aa7c64536c6f55d11a8f9f40df0636af6a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c 74  e libary is mult
1050: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1060: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1070: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1080: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1090: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
10a0: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
10b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10c0: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
10d0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
10e0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
10f0: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1100: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1110: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1120: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1130: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1140: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1150: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1160: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1170: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1180: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1190: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
11a0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
11b0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
11c0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
11d0: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
11e0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
11f0: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1200: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1210: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1220: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1230: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1240: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1250: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1260: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1270: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1280: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1290: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
12a0: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
12b0: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
12c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
12d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
12e0: 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  ATUS macro must 
12f0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65 69  be defined as ei
1300: 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 20  ther 0 or 1..** 
1310: 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  It determines wh
1320: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1330: 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74 65   features relate
1340: 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  d to .** SQLITE_
1350: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
1360: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
1370: 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f 74  y default or not
1380: 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  . This value can
1390: 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64 65  .** be overridde
13a0: 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
13b0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ng the sqlite3_c
13c0: 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f 0a  onfig() API..*/.
13d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
13f0: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
1400: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1410: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
1430: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1440: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
1450: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
1460: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
1470: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
1480: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
1490: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
14a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
14b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
14c0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
14d0: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
14e0: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
14f0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20  E_WIN32_MALLOC  
1500: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
1510: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
1520: 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  p API.**     SQL
1530: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20  ITE_ZERO_MALLOC 
1540: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
1550: 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74  e a stub allocat
1560: 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20 66  or that always f
1570: 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ails.**     SQLI
1580: 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20  TE_MEMDEBUG     
1590: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62            // Deb
15a0: 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f  ugging version o
15b0: 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  f system malloc(
15c0: 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f  ).**.** On Windo
15d0: 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54  ws, if the SQLIT
15e0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56  E_WIN32_MALLOC_V
15f0: 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73  ALIDATE macro is
1600: 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65   defined and the
1610: 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63  .** assert() mac
1620: 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65  ro is enabled, e
1630: 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  ach call into th
1640: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
1650: 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a  eap subsystem.**
1660: 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70   will cause Heap
1670: 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63  Validate to be c
1680: 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20  alled.  If heap 
1690: 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c  validation shoul
16a0: 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73  d fail, an.** as
16b0: 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  sertion will be 
16c0: 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  triggered..**.**
16d0: 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f 74   (Historical not
16e0: 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e:  There used t
16f0: 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74 68  o be several oth
1700: 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74 20  er options, but 
1710: 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20 69  we've.** pared i
1720: 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20 74  t down to just t
1730: 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a 0a  hese three.).**.
1740: 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ** If none of th
1750: 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69  e above are defi
1760: 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51  ned, then set SQ
1770: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1780: 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66  OC as.** the def
1790: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ault..*/.#if def
17a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
17b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
17c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
17d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
17e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
17f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1800: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1810: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31  LITE_MEMDEBUG)>1
1820: 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72  .# error "Two or
1830: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c   more of the fol
1840: 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74  lowing compile-t
1850: 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
1860: 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20  n options\. are 
1870: 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d  defined but at m
1880: 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77  ost one is allow
1890: 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53  ed:\. SQLITE_SYS
18a0: 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  TEM_MALLOC, SQLI
18b0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c  TE_WIN32_MALLOC,
18c0: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
18d0: 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ,\. SQLITE_ZERO_
18e0: 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23  MALLOC".#endif.#
18f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1900: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
1910: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1920: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1930: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1940: 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  d(SQLITE_ZERO_MA
1950: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
1960: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
1970: 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65  BUG)==0.# define
1980: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1990: 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a  ALLOC 1.#endif..
19a0: 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  /*.** If SQLITE_
19b0: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
19c0: 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  T is not zero, t
19d0: 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20  hen try to keep 
19e0: 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20  the.** sizes of 
19f0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1a00: 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61  ns below this va
1a10: 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62  lue where possib
1a20: 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  le..*/.#if !defi
1a30: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f  ned(SQLITE_MALLO
1a40: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20  C_SOFT_LIMIT).# 
1a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
1a60: 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20  LLOC_SOFT_LIMIT 
1a70: 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1024.#endif../*.
1a80: 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  ** We need to de
1a90: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
1aa0: 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e  CE as follows in
1ab0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65   order to enable
1ac0: 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75  .** recursive mu
1ad0: 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e  texes on most Un
1ae0: 69 78 20 73 79 73 74 65 6d 73 2e 20 20 42 75 74  ix systems.  But
1af0: 20 4d 61 63 20 4f 53 20 58 20 69 73 20 64 69 66   Mac OS X is dif
1b00: 66 65 72 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 5f  ferent..** The _
1b10: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1b20: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1b30: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1b40: 20 77 65 20 61 72 65 20 74 6f 6c 64 2c 0a 2a 2a   we are told,.**
1b50: 20 73 6f 20 69 74 20 69 73 20 6f 6d 69 74 74 65   so it is omitte
1b60: 64 20 74 68 65 72 65 2e 20 20 53 65 65 20 74 69  d there.  See ti
1b70: 63 6b 65 74 20 23 32 36 37 33 2e 0a 2a 2a 0a 2a  cket #2673..**.*
1b80: 2a 20 4c 61 74 65 72 20 77 65 20 6c 65 61 72 6e  * Later we learn
1b90: 20 74 68 61 74 20 5f 58 4f 50 45 4e 5f 53 4f 55   that _XOPEN_SOU
1ba0: 52 43 45 20 69 73 20 70 6f 6f 72 6c 79 20 6f 72  RCE is poorly or
1bb0: 20 69 6e 63 6f 72 72 65 63 74 6c 79 0a 2a 2a 20   incorrectly.** 
1bc0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 6f 6e 20 73  implemented on s
1bd0: 6f 6d 65 20 73 79 73 74 65 6d 73 2e 20 20 53 6f  ome systems.  So
1be0: 20 77 65 20 61 76 6f 69 64 20 64 65 66 69 6e 69   we avoid defini
1bf0: 6e 67 20 69 74 20 61 74 20 61 6c 6c 0a 2a 2a 20  ng it at all.** 
1c00: 69 66 20 69 74 20 69 73 20 61 6c 72 65 61 64 79  if it is already
1c10: 20 64 65 66 69 6e 65 64 20 6f 72 20 69 66 20 69   defined or if i
1c20: 74 20 69 73 20 75 6e 6e 65 65 64 65 64 20 62 65  t is unneeded be
1c30: 63 61 75 73 65 20 77 65 20 61 72 65 0a 2a 2a 20  cause we are.** 
1c40: 6e 6f 74 20 64 6f 69 6e 67 20 61 20 74 68 72 65  not doing a thre
1c50: 61 64 73 61 66 65 20 62 75 69 6c 64 2e 20 20 54  adsafe build.  T
1c60: 69 63 6b 65 74 20 23 32 36 38 31 2e 0a 2a 2a 0a  icket #2681..**.
1c70: 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 69 63 6b  ** See also tick
1c80: 65 74 20 23 32 37 34 31 2e 0a 2a 2f 0a 23 69 66  et #2741..*/.#if
1c90: 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e   !defined(_XOPEN
1ca0: 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64 65 66  _SOURCE) && !def
1cb0: 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29  ined(__DARWIN__)
1cc0: 20 5c 0a 20 26 26 20 21 64 65 66 69 6e 65 64 28   \. && !defined(
1cd0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53 51  __APPLE__) && SQ
1ce0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a  LITE_THREADSAFE.
1cf0: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
1d00: 5f 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a 20  _SOURCE 500  /* 
1d10: 4e 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c 65  Needed to enable
1d20: 20 70 74 68 72 65 61 64 20 72 65 63 75 72 73 69   pthread recursi
1d30: 76 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23 65  ve mutexes */.#e
1d40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1d50: 54 43 4c 20 68 65 61 64 65 72 73 20 61 72 65 20  TCL headers are 
1d60: 6f 6e 6c 79 20 6e 65 65 64 65 64 20 77 68 65 6e  only needed when
1d70: 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 54   compiling the T
1d80: 43 4c 20 62 69 6e 64 69 6e 67 73 2e 0a 2a 2f 0a  CL bindings..*/.
1d90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1da0: 54 45 5f 54 43 4c 29 20 7c 7c 20 64 65 66 69 6e  TE_TCL) || defin
1db0: 65 64 28 54 43 4c 53 48 29 0a 23 20 69 6e 63 6c  ed(TCLSH).# incl
1dc0: 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 65 6e 64  ude <tcl.h>.#end
1dd0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
1de0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
1df0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
1e00: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
1e10: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
1e20: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
1e30: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
1e40: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
1e50: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
1e60: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
1e70: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
1e80: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
1e90: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
1ea0: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
1eb0: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
1ec0: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 72 75  e smaller and ru
1ed0: 6e 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  n faster by disa
1ee0: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 6e 75 6d  bling the.** num
1ef0: 62 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ber assert() sta
1f00: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
1f10: 6f 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74  ode.  So we want
1f20: 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
1f30: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72  ion.** to be for
1f40: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65   NDEBUG to be se
1f50: 74 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20  t and NDEBUG to 
1f60: 62 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c  be undefined onl
1f70: 79 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  y if SQLITE_DEBU
1f80: 47 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68  G.** is set.  Th
1f90: 75 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65  us NDEBUG become
1fa0: 73 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68  s an opt-in rath
1fb0: 65 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f  er than an opt-o
1fc0: 75 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a  ut.** feature..*
1fd0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
1fe0: 44 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e  DEBUG) && !defin
1ff0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2000: 20 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55   .# define NDEBU
2010: 47 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  G 1.#endif.#if d
2020: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
2030: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
2040: 5f 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20  _DEBUG).# undef 
2050: 4e 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f  NDEBUG.#endif../
2060: 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73  *.** The testcas
2070: 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65  e() macro is use
2080: 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65  d to aid in cove
2090: 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57  rage testing.  W
20a0: 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f  hen .** doing co
20b0: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20  verage testing, 
20c0: 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e  the condition in
20d0: 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e  side the argumen
20e0: 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65  t to.** testcase
20f0: 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75  () must be evalu
2100: 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61  ated both true a
2110: 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65  nd false in orde
2120: 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c  r to.** get full
2130: 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65   branch coverage
2140: 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28  .  The testcase(
2150: 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72  ) macro is inser
2160: 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65  ted.** to help e
2170: 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74  nsure adequate t
2180: 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20  est coverage in 
2190: 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d  places where sim
21a0: 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e  ple.** condition
21b0: 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61  /decision covera
21c0: 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65  ge is inadequate
21d0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
21e0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61  testcase().** ca
21f0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
2200: 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20  e sure boundary 
2210: 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65  values are teste
2220: 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61  d.  For.** bitma
2230: 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61  sk tests, testca
2240: 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64  se() can be used
2250: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61   to make sure ea
2260: 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67  ch bit.** is sig
2270: 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65  nificant and use
2280: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e  d at least once.
2290: 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74    On switch stat
22a0: 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20  ements.** where 
22b0: 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67  multiple cases g
22c0: 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c  o to the same bl
22d0: 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73  ock of code, tes
22e0: 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69  tcase().** can i
22f0: 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63  nsure that all c
2300: 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74  ases are evaluat
2310: 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66  ed..**.*/.#ifdef
2320: 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45   SQLITE_COVERAGE
2330: 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
2340: 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74  ite3Coverage(int
2350: 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  );.# define test
2360: 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29  case(X)  if( X )
2370: 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67  { sqlite3Coverag
2380: 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23  e(__LINE__); }.#
2390: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65  else.# define te
23a0: 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66  stcase(X).#endif
23b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54  ../*.** The TEST
23c0: 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73  ONLY macro is us
23d0: 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61  ed to enclose va
23e0: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
23f0: 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  ons or.** other 
2400: 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61  bits of code tha
2410: 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20  t are needed to 
2420: 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75  support the argu
2430: 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20  ments.** within 
2440: 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61  testcase() and a
2450: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a  ssert() macros..
2460: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2470: 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  NDEBUG) || defin
2480: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
2490: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
24a0: 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58  e TESTONLY(X)  X
24b0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24c0: 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64  TESTONLY(X).#end
24d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69  if../*.** Someti
24e0: 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d  mes we need a sm
24f0: 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f  all amount of co
2500: 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72  de such as a var
2510: 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  iable initializa
2520: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70  tion.** to setup
2530: 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73   for a later ass
2540: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e  ert() statement.
2550: 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74    We do not want
2560: 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a   this code to.**
2570: 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73   appear when ass
2580: 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65  ert() is disable
2590: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
25a0: 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65  g macro is there
25b0: 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20  fore.** used to 
25c0: 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74  contain that set
25d0: 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56  up code.  The "V
25e0: 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e  VA" acronym stan
25f0: 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66  ds for.** "Verif
2600: 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
2610: 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69  ion, and Accredi
2620: 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68  tation".  In oth
2630: 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a  er words, the.**
2640: 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41   code within VVA
2650: 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c  _ONLY() will onl
2660: 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72  y run during ver
2670: 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73  ification proces
2680: 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ses..*/.#ifndef 
2690: 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  NDEBUG.# define 
26a0: 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23  VVA_ONLY(X)  X.#
26b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56  else.# define VV
26c0: 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  A_ONLY(X).#endif
26d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41  ../*.** The ALWA
26e0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63  YS and NEVER mac
26f0: 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f  ros surround boo
2700: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lean expressions
2710: 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69   which .** are i
2720: 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79  ntended to alway
2730: 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c  s be true or fal
2740: 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  se, respectively
2750: 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65  .  Such.** expre
2760: 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20  ssions could be 
2770: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
2780: 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79   code completely
2790: 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61  .  But they.** a
27a0: 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61  re included in a
27b0: 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72   few cases in or
27c0: 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74  der to enhance t
27d0: 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a  he resilience.**
27e0: 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e   of SQLite to un
27f0: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
2800: 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20  r - to make the 
2810: 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69  code "self-heali
2820: 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69  ng".** or "ducti
2830: 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20  le" rather than 
2840: 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20  being "brittle" 
2850: 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20  and crashing at 
2860: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e  the first.** hin
2870: 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62  t of unplanned b
2880: 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49  ehavior..**.** I
2890: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41  n other words, A
28a0: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
28b0: 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65  are added for de
28c0: 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a  fensive code..**
28d0: 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63  .** When doing c
28e0: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20  overage testing 
28f0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
2900: 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20   are hard-coded 
2910: 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e  to.** be true an
2920: 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20  d false so that 
2930: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
2940: 63 6f 64 65 20 74 68 65 6e 20 73 70 65 63 69 66  code then specif
2950: 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65  y will.** not be
2960: 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65   counted as unte
2970: 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  sted code..*/.#i
2980: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2990: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
29a0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
29b0: 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65  X)      (1).# de
29c0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
29d0: 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64      (0).#elif !d
29e0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23  efined(NDEBUG).#
29f0: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2a00: 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61  )      ((X)?1:(a
2a10: 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64  ssert(0),0)).# d
2a20: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
2a30: 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72       ((X)?(asser
2a40: 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65  t(0),1):0).#else
2a50: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
2a60: 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64  (X)      (X).# d
2a70: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
2a80: 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a       (X).#endif.
2a90: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
2aa0: 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66  ue (non-zero) if
2ab0: 20 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20   the input is a 
2ac0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
2ad0: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
2ae0: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
2af0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
2b00: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
2b10: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
2b20: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
2b30: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
2b40: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
2b50: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
2b60: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
2b70: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
2b80: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
2b90: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
2ba0: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
2bb0: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
2bc0: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
2bd0: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
2be0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2bf0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
2c00: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
2c10: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
2c20: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
2c30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2c40: 6c 6c 79 20 74 72 75 65 2e 20 20 47 43 43 20 69  lly true.  GCC i
2c50: 73 20 61 62 6c 65 20 74 6f 0a 2a 2a 20 75 73 65  s able to.** use
2c60: 20 74 68 65 73 65 20 68 69 6e 74 73 20 74 6f 20   these hints to 
2c70: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2c80: 63 6f 64 65 2c 20 73 6f 6d 65 74 69 6d 65 73 2e  code, sometimes.
2c90: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2ca0: 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 30 0a 23  __GNUC__) && 0.#
2cb0: 20 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58   define likely(X
2cc0: 29 20 20 20 20 5f 5f 62 75 69 6c 74 69 6e 5f 65  )    __builtin_e
2cd0: 78 70 65 63 74 28 28 58 29 2c 31 29 0a 23 20 64  xpect((X),1).# d
2ce0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
2cf0: 29 20 20 5f 5f 62 75 69 6c 74 69 6e 5f 65 78 70  )  __builtin_exp
2d00: 65 63 74 28 28 58 29 2c 30 29 0a 23 65 6c 73 65  ect((X),0).#else
2d10: 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  .# define likely
2d20: 28 58 29 20 20 20 20 21 21 28 58 29 0a 23 20 64  (X)    !!(X).# d
2d30: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
2d40: 29 20 20 21 21 28 58 29 0a 23 65 6e 64 69 66 0a  )  !!(X).#endif.
2d50: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
2d60: 65 33 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  e3.h".#include "
2d70: 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65  hash.h".#include
2d80: 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c   "parse.h".#incl
2d90: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
2da0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
2db0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
2dc0: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
2dd0: 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75  assert.h>.#inclu
2de0: 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f  de <stddef.h>../
2df0: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
2e00: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
2e10: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
2e20: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
2e30: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
2e40: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
2e50: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
2e60: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2e70: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
2e80: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
2e90: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
2ea0: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
2eb0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2ec0: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
2ed0: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
2ee0: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
2ef0: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
2f00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
2f10: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
2f20: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
2f30: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
2f40: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
2f50: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
2f60: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
2f70: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
2f80: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
2f90: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
2fa0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
2fb0: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
2fc0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fd0: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
2fe0: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2ff0: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
3000: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
3010: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
3020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
3030: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
3040: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
3050: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
3060: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
3070: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
3080: 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69  piler .** to omi
3090: 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54  t code used by T
30a0: 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f  EMP tables witho
30b0: 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66  ut messy #ifndef
30c0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
30d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
30e0: 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e  IT_TEMPDB.#defin
30f0: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a  e OMIT_TEMPDB 1.
3100: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d  #else.#define OM
3110: 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64  IT_TEMPDB 0.#end
3120: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66  if../*.** The "f
3130: 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62  ile format" numb
3140: 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  er is an integer
3150: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
3160: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a  nted whenever.**
3170: 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20   the VDBE-level 
3180: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
3190: 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ges.  The follow
31a0: 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  ing macros defin
31b0: 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66  e the.** the def
31c0: 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74  ault file format
31d0: 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73   for new databas
31e0: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d  es and the maxim
31f0: 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a  um file format.*
3200: 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61  * that the libra
3210: 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a  ry can read..*/.
3220: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3230: 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  AX_FILE_FORMAT 4
3240: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3250: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
3260: 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAT.# define SQL
3270: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
3280: 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66  _FORMAT 4.#endif
3290: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
32a0: 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65  e whether trigge
32b0: 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65  rs are recursive
32c0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
32d0: 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61  is can be.** cha
32e0: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
32f0: 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e   using a pragma.
3300: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3310: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3320: 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20  SIVE_TRIGGERS.# 
3330: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
3340: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
3350: 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69  TRIGGERS 0.#endi
3360: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65  f../*.** Provide
3370: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
3380: 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50   for SQLITE_TEMP
3390: 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69  _STORE in case i
33a0: 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  t is not specifi
33b0: 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d  ed.** on the com
33c0: 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66  mand-line.*/.#if
33d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  ndef SQLITE_TEMP
33e0: 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20  _STORE.# define 
33f0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
3400: 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  E 1.# define SQL
3410: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78  ITE_TEMP_STORE_x
3420: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
3430: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
3440: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43  #endif../*.** GC
3450: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
3460: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
3470: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
3480: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
3490: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
34a0: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
34b0: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
34c0: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
34d0: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
34e0: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
34f0: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
3500: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
3510: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
3520: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
3530: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
3540: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
3550: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
3560: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
3570: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
3580: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
3590: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
35a0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
35b0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
35c0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
35d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
35e0: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
35f0: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
3600: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
3610: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
3620: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
3630: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
3640: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
3650: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
3660: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
3670: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
3680: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
3690: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
36a0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
36b0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
36c0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
36d0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
36e0: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
36f0: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
3700: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
3710: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
3720: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
3730: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
3740: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
3750: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
3760: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
3770: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
3780: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
3790: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
37a0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
37b0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
37c0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
37d0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
37e0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
37f0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
3800: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3810: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
3820: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3830: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
3840: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
3850: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
3860: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3870: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
3880: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
3890: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
38a0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
38b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
38c0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
38d0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
38e0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
38f0: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
3900: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
3910: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
3920: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
3930: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
3940: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
3950: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3960: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
3970: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
3980: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
3990: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
39a0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
39b0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
39c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
39d0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
39e0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
39f0: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
3a00: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
3a10: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
3a20: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
3a30: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
3a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
3a50: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
3a60: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
3a70: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
3a80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
3a90: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
3aa0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
3ab0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
3ad0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3ae0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
3af0: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
3b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
3b10: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
3b20: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
3b30: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
3b40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
3b50: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3b60: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
3b70: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
3b80: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
3b90: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
3ba0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
3bb0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
3bc0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
3bd0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
3be0: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
3bf0: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
3c00: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
3c10: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
3c20: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
3c30: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
3c40: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
3c50: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
3c60: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
3c70: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
3c80: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
3c90: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
3ca0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
3cb0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
3cc0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
3cd0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
3ce0: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
3cf0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
3d00: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
3d10: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
3d20: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
3d30: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
3d40: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
3d50: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
3d60: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
3d70: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
3d80: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3d90: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
3da0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
3db0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
3dc0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
3dd0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
3de0: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
3df0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
3e00: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
3e10: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
3e20: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
3e30: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
3e40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
3e50: 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  s to determine w
3e60: 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69  hether the machi
3e70: 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74  ne is big or lit
3e80: 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65  tle endian,.** e
3e90: 76 61 6c 75 61 74 65 64 20 61 74 20 72 75 6e 74  valuated at runt
3ea0: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
3eb0: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
3ec0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
3ed0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
3ee0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
3ef0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
3f00: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
3f10: 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65 66 69  ed(i386) || defi
3f20: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c  ned(__i386__) ||
3f30: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
3f40: 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )\.             
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3f70: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
3f80: 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20 64 65  __x86_64__).# de
3f90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3fa0: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
3fb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3fc0: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
3fd0: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
3fe0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
3ff0: 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65  F16LE.#else.# de
4000: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
4010: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
4020: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
4030: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
4040: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
4050: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
4060: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
4070: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
4080: 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49 54  F16NATIVE (SQLIT
4090: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
40a0: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
40b0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
40c0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
40d0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
40e0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
40f0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
4100: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
4110: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
4120: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
4130: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
4140: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
4150: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
4160: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
4170: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
4180: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
4190: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
41a0: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
41b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
41c0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
41d0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
41e0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
41f0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
4200: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
4210: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
4220: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
4230: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
4240: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
4250: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
4260: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
4270: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
4280: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
4290: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
42a0: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
42b0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
42c0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
42d0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
42e0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
42f0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
4300: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
4310: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
4320: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
4330: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
4340: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
4350: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
4360: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
4370: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
4380: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
4390: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
43a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
43b0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
43c0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
43d0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
43e0: 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74  plemention might
43f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
4400: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
4410: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
4420: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
4430: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
4440: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
4450: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4460: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
4470: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4480: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4490: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
44a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
44b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
44c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
44d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
44e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
44f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
4500: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
4510: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
4520: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
4530: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
4540: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
4550: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
4560: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
4570: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
4580: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
4590: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
45a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
45b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
45c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
45d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
45e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
45f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
4600: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
4610: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
4620: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
4630: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
4640: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
4650: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4660: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
4670: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
4680: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
4690: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
46a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
46b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
46c0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
46d0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
46e0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
46f0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
4700: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
4710: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
4720: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
4730: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4740: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4750: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
4760: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
4770: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
4780: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4790: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
47a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
47b0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
47c0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
47d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
47e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
47f0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
4800: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
4810: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
4820: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
4830: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
4840: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
4850: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
4860: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
4870: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
4880: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
4890: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
48a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
48b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
48c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
48d0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
48e0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
48f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
4900: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
4910: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
4920: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
4930: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
4940: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
4950: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4960: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
4970: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
4980: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
4990: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
49a0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
49b0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
49c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
49d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
49e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
49f0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
4a00: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
4a10: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4a20: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
4a30: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
4a40: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
4a50: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
4a60: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
4a70: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4a80: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
4a90: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
4aa0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
4ab0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
4ac0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
4ad0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
4ae0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
4af0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
4b00: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
4b10: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
4b20: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
4b30: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
4b40: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
4b50: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
4b60: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
4b70: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
4b80: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
4b90: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
4ba0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
4bb0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
4bc0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4be0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
4bf0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
4c00: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
4c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
4c20: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
4c30: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
4c40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
4c50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4c60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
4c70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
4c80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
4c90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
4ca0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
4cb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
4cc0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
4cd0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
4ce0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
4cf0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
4d00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
4d10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
4d20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
4d30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4d40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
4d50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
4d60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4d70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
4d80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
4d90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
4da0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
4db0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
4dc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
4dd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
4de0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
4df0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
4e00: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
4e10: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
4e20: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
4e30: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
4e40: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
4e50: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
4e60: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
4e70: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
4e80: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
4e90: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
4ea0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
4eb0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
4ec0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
4ed0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
4ee0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
4ef0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
4f00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
4f10: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
4f20: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
4f30: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
4f40: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
4f50: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
4f60: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
4f70: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
4f80: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
4f90: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
4fa0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
4fb0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
4fc0: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
4fd0: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
4fe0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
4ff0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
5000: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
5010: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
5020: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
5030: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
5040: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
5050: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
5060: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
5070: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
5080: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
5090: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
50a0: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
50b0: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
50c0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
50d0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
50e0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
50f0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
5100: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
5110: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
5120: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
5130: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
5140: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
5150: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
5160: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
5170: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
5180: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
5190: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
51a0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
51b0: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
51c0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
51d0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
51e0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
51f0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
5200: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
5210: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
5220: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
5230: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
5240: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5250: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
5260: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
5270: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
5280: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
5290: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
52a0: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
52b0: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
52c0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
52d0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
52e0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
52f0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
5300: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
5310: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
5320: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
5330: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
5340: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
5350: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
5360: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
5370: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
5380: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
5390: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
53a0: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
53b0: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
53c0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
53d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
53e0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
53f0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
5400: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5410: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
5420: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
5430: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
5440: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
5450: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5460: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
5470: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
5480: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
5490: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
54a0: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
54b0: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
54c0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
54d0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
54e0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
54f0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
5500: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
5510: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
5520: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5530: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
5540: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5550: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
5560: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
5570: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
5580: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
5590: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
55a0: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
55b0: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
55c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
55d0: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
55e0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
55f0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
5600: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
5610: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
5620: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
5630: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
5640: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
5650: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
5660: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
5670: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
5680: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
5690: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
56a0: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
56b0: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
56c0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
56d0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
56e0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
56f0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
5700: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
5710: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
5720: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
5730: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
5740: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
5750: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
5760: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5770: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
5780: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
5790: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
57a0: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
57b0: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
57c0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
57d0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
57e0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
57f0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
5800: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
5810: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
5820: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
5830: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
5840: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
5850: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
5860: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
5870: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
5880: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
5890: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
58a0: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
58b0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
58c0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
58d0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
58e0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
58f0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5900: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
5910: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
5920: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
5930: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
5940: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
5950: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
5960: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
5970: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
5980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
5990: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
59a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
59b0: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
59c0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
59d0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
59e0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
59f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
5a00: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
5a10: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5a20: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
5a30: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5a40: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
5a50: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
5a60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a70: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
5a80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5a90: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
5aa0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
5ab0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
5ac0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
5ad0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
5ae0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
5af0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
5b00: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
5b10: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
5b20: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
5b30: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
5b40: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
5b50: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
5b60: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
5b70: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
5b80: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
5b90: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5ba0: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
5bb0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
5bc0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
5bd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
5be0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
5bf0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c00: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
5c10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c20: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
5c30: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
5c40: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
5c50: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
5c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c70: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
5c80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
5c90: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
5ca0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
5cb0: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
5cc0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
5cd0: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
5ce0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5cf0: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
5d00: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
5d10: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
5d20: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
5d30: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
5d40: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
5d50: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
5d60: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
5d70: 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75  f struct StrAccu
5d80: 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65  m StrAccum;.type
5d90: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5da0: 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20   Table;.typedef 
5db0: 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b  struct TableLock
5dc0: 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65   TableLock;.type
5dd0: 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e  def struct Token
5de0: 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20   Token;.typedef 
5df0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
5e00: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
5e10: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
5e20: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
5e30: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
5e40: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
5e50: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
5e60: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
5e70: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
5e80: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
5e90: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
5ea0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5eb0: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
5ec0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ed0: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
5ee0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5ef0: 68 65 72 65 50 6c 61 6e 20 57 68 65 72 65 50 6c  herePlan WherePl
5f00: 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  an;.typedef stru
5f10: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
5f20: 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  reInfo;.typedef 
5f30: 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76 65  struct WhereLeve
5f40: 6c 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f  l WhereLevel;../
5f50: 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63  *.** Defer sourc
5f60: 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62  ing vdbe.h and b
5f70: 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74  tree.h until aft
5f80: 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20  er the "u8" and 
5f90: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
5fa0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
5fb0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
5fc0: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
5fd0: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
5fe0: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
5ff0: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
6000: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
6010: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
6020: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
6030: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
6040: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
6050: 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  h"..#include "os
6060: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
6070: 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45  tex.h".../*.** E
6080: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
6090: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
60a0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
60b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
60c0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
60d0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
60e0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
60f0: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
6100: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
6110: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
6120: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
6130: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
6140: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
6150: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
6160: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
6170: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
6180: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
6190: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
61a0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
61b0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
61c0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  b {.  char *zNam
61d0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
61e0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
61f0: 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
6200: 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  pBt;          /*
6210: 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75   The B*Tree stru
6220: 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64  cture for this d
6230: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
6240: 20 20 75 38 20 69 6e 54 72 61 6e 73 3b 20 20 20    u8 inTrans;   
6250: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74         /* 0: not
6260: 20 77 72 69 74 61 62 6c 65 2e 20 20 31 3a 20 54   writable.  1: T
6270: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20  ransaction.  2: 
6280: 43 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20  Checkpoint */.  
6290: 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b  u8 safety_level;
62a0: 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72       /* How aggr
62b0: 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e  essive at syncin
62c0: 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a  g data to disk *
62d0: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
62e0: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ema;     /* Poin
62f0: 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20  ter to database 
6300: 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79  schema (possibly
6310: 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a   shared) */.};..
6320: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
6330: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
6340: 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f  ng structure sto
6350: 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73  res a database s
6360: 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73  chema..**.** Mos
6370: 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  t Schema objects
6380: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20   are associated 
6390: 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54  with a Btree.  T
63a0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a  he exception is.
63b0: 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f  ** the Schema fo
63c0: 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
63d0: 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62  aes (sqlite3.aDb
63e0: 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72  [1]) which is fr
63f0: 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20  ee-standing..** 
6400: 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  In shared cache 
6410: 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53  mode, a single S
6420: 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e  chema object can
6430: 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75   be shared by mu
6440: 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73  ltiple.** Btrees
6450: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
6460: 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69  he same underlyi
6470: 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65  ng BtShared obje
6480: 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d  ct..** .** Schem
6490: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
64a0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
64b0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
64c0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
64d0: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
64e0: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
64f0: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
6500: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
6510: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
6520: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
6530: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
6540: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
6550: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
6560: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
6570: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
6580: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
6590: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
65a0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
65b0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
65c0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
65d0: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
65e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
65f0: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
6600: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
6610: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
6620: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
6630: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
6640: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
6650: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
6660: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
6670: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
6680: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
6690: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
66a0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
66b0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
66c0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
66d0: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
66e0: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
66f0: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
6700: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
6710: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
6720: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
6730: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
6740: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
6750: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
6760: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
6770: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
6780: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
6790: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
67a0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
67b0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
67c0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
67d0: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
67e0: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
67f0: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
6800: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
6810: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
6820: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
6830: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
6840: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
6850: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
6860: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
6870: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
6880: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
6890: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
68a0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
68b0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
68c0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
68d0: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
68e0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
68f0: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
6900: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
6910: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
6920: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
6930: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
6940: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
6950: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
6960: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
6970: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
6980: 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d   .** Db.pSchema-
6990: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
69a0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
69b0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
69c0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
69d0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28  pSchema->flags&(
69e0: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
69f0: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
6a00: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
6a10: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6a20: 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
6a30: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
6a40: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
6a50: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
6a60: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50  chema->flags|=(P
6a70: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
6a80: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
6a90: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
6aa0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e  Schema->flags&=~
6ab0: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
6ac0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
6ad0: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
6ae0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
6af0: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
6b00: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
6b10: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
6b20: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
6b30: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
6b40: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
6b50: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
6b60: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
6b70: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
6b80: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
6b90: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
6ba0: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
6bb0: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
6bc0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
6bd0: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
6be0: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
6bf0: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
6c00: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
6c10: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
6c20: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
6c30: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
6c40: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
6c50: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
6c60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
6c70: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
6c80: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
6c90: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
6ca0: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
6cb0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
6cc0: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
6cd0: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
6ce0: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
6cf0: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
6d00: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
6d10: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
6d20: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
6d30: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
6d40: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
6d50: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
6d60: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
6d70: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
6d80: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
6d90: 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31  _TRIGGER_DEPTH+1
6da0: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
6db0: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
6dc0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
6dd0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
6de0: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
6df0: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
6e00: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
6e10: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
6e20: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
6e30: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
6e40: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
6e50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
6e60: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
6e70: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
6e80: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
6e90: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
6ea0: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
6eb0: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
6ec0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
6ed0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
6ee0: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
6ef0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
6f00: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
6f10: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
6f20: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
6f30: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
6f40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
6f50: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
6f60: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
6f70: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
6f80: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
6f90: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
6fa0: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
6fb0: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
6fc0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
6fd0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
6fe0: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
6ff0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
7000: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
7010: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
7020: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
7030: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
7040: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
7050: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7060: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
7070: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
7080: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
7090: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
70a0: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
70b0: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
70c0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
70d0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
70e0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
70f0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7100: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
7110: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
7120: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
7130: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
7140: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
7150: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
7160: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
7170: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
7180: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
7190: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
71a0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
71b0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
71c0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
71d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
71e0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
71f0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
7200: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
7210: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
7220: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
7230: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
7240: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
7250: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
7260: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
7270: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
7280: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
7290: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
72a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
72b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
72c0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
72d0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
72e0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
72f0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
7300: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
7310: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
7320: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
7330: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
7340: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
7350: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
7360: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7370: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
7380: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
7390: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
73a0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
73b0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
73c0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
73d0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
73e0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
73f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7400: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
7410: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
7420: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
7430: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
7440: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
7450: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
7460: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
7470: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
7480: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
7490: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
74a0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
74b0: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
74c0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
74d0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
74e0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
74f0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
7500: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
7510: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
7520: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
7530: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
7540: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
7550: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
7560: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
7570: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
7580: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  };../*.** Each d
7590: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
75a0: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
75b0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
75c0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
75d0: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
75e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
75f0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
7600: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
7610: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
7620: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
7630: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
7640: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
7650: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
7660: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
7670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
7680: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
7690: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
76a0: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
76b0: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
76c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
76d0: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
76e0: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
7710: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
7720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7730: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7740: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
7750: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
7760: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
7770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7780: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
7790: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
77a0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
77b0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
77c0: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
77d0: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
77e0: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
77f0: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7810: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
7820: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
7830: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
7840: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
7850: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
7860: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
7870: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
7880: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
7890: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
78a0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
78b0: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
78c0: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
78f0: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
7900: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
7910: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
7920: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
7930: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
7940: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
7950: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
7960: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7980: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
7990: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
79a0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
79b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
79c0: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
79d0: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
79e0: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7a00: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
7a10: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
7a20: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
7a30: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
7a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
7a50: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
7a60: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
7a70: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
7a80: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
7a90: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
7aa0: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
7ab0: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
7ac0: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ae0: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
7af0: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
7b00: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
7b10: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
7b20: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
7b30: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
7b40: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
7b50: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
7b60: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
7b70: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
7b80: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
7b90: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
7ba0: 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78   TS */.  int nex
7bb0: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
7bc0: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
7bd0: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
7be0: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
7bf0: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
7c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
7c10: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
7c20: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
7c30: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
7c40: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
7c50: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
7c60: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
7c70: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
7c80: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
7c90: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
7ca0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7cb0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
7cc0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
7cd0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
7ce0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
7cf0: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73  /* Limits */.  s
7d00: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
7d10: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
7d20: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
7d30: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
7d40: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
7d50: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
7d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
7d70: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
7d80: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
7d90: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
7dc0: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
7dd0: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
7de0: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7e00: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
7e10: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
7e20: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
7e30: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
7e40: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
7e50: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
7e60: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
7e70: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
7e80: 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20  activeVdbeCnt;  
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7ea0: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
7eb0: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
7ec0: 20 2a 2f 0a 20 20 69 6e 74 20 77 72 69 74 65 56   */.  int writeV
7ed0: 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20  dbeCnt;         
7ee0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7ef0: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
7f00: 61 74 20 61 72 65 20 77 72 69 74 69 6e 67 20 2a  at are writing *
7f10: 2f 0a 20 20 69 6e 74 20 76 64 62 65 45 78 65 63  /.  int vdbeExec
7f20: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
7f30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
7f40: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
7f50: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
7f60: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7f80: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
7f90: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
7fa0: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
7fb0: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
7fc0: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
7fd0: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
7fe0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
7ff0: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
8000: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
8010: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
8020: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
8030: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
8060: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
8070: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
8080: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
8090: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
80a0: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
80b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
80c0: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
80f0: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
8100: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
8110: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8130: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
8140: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
8150: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
8160: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
8170: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
8180: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
8190: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
81a0: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
81c0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
81d0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
81e0: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
81f0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
8200: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
8210: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
8220: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
8230: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
8240: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
8250: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
8260: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
8270: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
8280: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66  _int64);.#ifndef
8290: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
82a0: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
82b0: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
82c0: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
82d0: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
82e0: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
82f0: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
8300: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
8310: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
8320: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
8330: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
8340: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
8350: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
8360: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
8370: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
8380: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
8390: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
83a0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
83b0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
83c0: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
83d0: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
83f0: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
8400: 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d  or message (UTF-
8410: 38 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20  8 encoded) */.  
8420: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b  char *zErrMsg16;
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8440: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
8450: 6f 72 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d  or message (UTF-
8460: 31 36 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20  16 encoded) */. 
8470: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
8480: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
8490: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
84a0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
84b0: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
84c0: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
84d0: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
84e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
84f0: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
8500: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
8510: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
8520: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
8530: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
8540: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
8550: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
8560: 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75  TION.  int (*xAu
8570: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
8580: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8590: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
85a0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85d0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
85e0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
85f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
8600: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
8610: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
8620: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
8630: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
8640: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
8650: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
8660: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
8670: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
8680: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
8690: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
86a0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
86b0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
86c0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
86d0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
86e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
86f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72   */.  int nProgr
8700: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 20  essOps;         
8710: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8720: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
8730: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
8740: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
8750: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
8760: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
8770: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
8780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
8790: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
87a0: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
87b0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
87c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
87d0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
87e0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
87f0: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
8800: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
8810: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
8820: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
8830: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
8840: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
8850: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
8860: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
8870: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
8880: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
8890: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
88a0: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
88b0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
88c0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
88d0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
88e0: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
88f0: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
8900: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
8910: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
8920: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
8930: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
8940: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
8950: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
8960: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
8970: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
8980: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
8990: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
89a0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
89b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
89c0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
89d0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
89e0: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
89f0: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
8a00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
8a10: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
8a20: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
8a30: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
8a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
8a50: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
8a60: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
8a70: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8a90: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
8aa0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
8ab0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
8ac0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
8ad0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8ae0: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
8af0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
8b00: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
8b10: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
8b20: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
8b30: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
8b40: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
8b50: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  ion. */.  int *p
8b60: 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20  nBytesFreed;    
8b70: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
8b80: 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e  t NULL, incremen
8b90: 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65  t this in DbFree
8ba0: 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51  () */..#ifdef SQ
8bb0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
8bc0: 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54  CK_NOTIFY.  /* T
8bd0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
8be0: 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70  iables are all p
8bf0: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
8c00: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20  STATIC_MASTER . 
8c10: 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62   ** mutex, not b
8c20: 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e  y sqlite3.mutex.
8c30: 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62   They are used b
8c40: 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79  y code in notify
8c50: 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  .c. .  **.  ** W
8c60: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
8c70: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
8c80: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
8c90: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
8ca0: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
8cb0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
8cc0: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
8cd0: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
8ce0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
8cf0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
8d00: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
8d10: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
8d20: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
8d30: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
8d40: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
8d50: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
8d60: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
8d70: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
8d80: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
8d90: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
8da0: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
8db0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
8dc0: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
8dd0: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
8de0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
8df0: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
8e00: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
8e10: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e30: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8e40: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
8e50: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
8e60: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
8e70: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
8e80: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
8e90: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
8ea0: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
8eb0: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
8ec0: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
8ed0: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
8ee0: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ions */.#endif.}
8ef0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
8f00: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
8f10: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
8f20: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
8f30: 69 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64 62  ine ENC(db) ((db
8f40: 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d  )->aDb[0].pSchem
8f50: 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  a->enc)../*.** P
8f60: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
8f70: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
8f80: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
8f90: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
8fa0: 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  e      0x0000000
8fb0: 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72  1  /* True to tr
8fc0: 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69  ace VDBE executi
8fd0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
8fe0: 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
8ff0: 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20 20  es  0x00000002  
9000: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
9010: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
9020: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9030: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
9040: 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f     0x00000004  /
9050: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
9060: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
9070: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
9080: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
9090: 65 73 20 20 30 78 30 30 30 30 30 30 30 38 20 20  es  0x00000008  
90a0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
90b0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
90c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
90d0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
90e0: 30 30 30 30 30 31 30 20 20 2f 2a 20 43 6f 75 6e  0000010  /* Coun
90f0: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
9100: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
9140: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
9150: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
9190: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
91a0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
91b0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
91c0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 30  lback   0x000000
91d0: 32 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  20  /* Invoke th
91e0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
91f0: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
9230: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
9240: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
9250: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
9260: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 44 65 62  00000040  /* Deb
9270: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
9280: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
9290: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
92a0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
92b0: 30 30 30 30 30 38 30 20 20 2f 2a 20 44 65 62 75  0000080  /* Debu
92c0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
92d0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
92e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
92f0: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
9300: 30 30 30 30 31 30 30 20 20 2f 2a 20 4f 4b 20 74  0000100  /* OK t
9310: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
9320: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
9330: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
9340: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 30 32  opTrace 0x000002
9350: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
9360: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
9370: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
9380: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
9390: 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 34 30  ecks   0x0000040
93a0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
93b0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
93c0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
93d0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
93e0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 38  ommitted 0x00008
93f0: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
9400: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
9410: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
9420: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
9430: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65  00001000  /* Cre
9440: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
9450: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
9460: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9470: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
9480: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73  x00002000  /* Us
9490: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
94a0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
94b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
94c0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
94d0: 30 30 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20  0004000  /* Use 
94e0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
94f0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
9500: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
9510: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
9520: 30 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  08000  /* Ignore
9530: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
9540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9550: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
9560: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52  0x00010000  /* R
9570: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
9580: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
9590: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
95a0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 32  iggers    0x0002
95b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
95c0: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
95d0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
95e0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
95f0: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
9600: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
9610: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
9620: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
9630: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
9640: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
9650: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
9660: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
9670: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
9680: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
9690: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00100000  /* Pre
96a0: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
96b0: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
96c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
96d0: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32  Extension  0x002
96e0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
96f0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
9700: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9710: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
9720: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
9730: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
9740: 72 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a  riggers */../*.*
9750: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
9760: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
9770: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
9780: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
9790: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
97a0: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
97b0: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
97c0: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
97d0: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
97e0: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
97f0: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9800: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9810: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
9820: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
9830: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
9840: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9850: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
9860: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
9870: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
9880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
9890: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
98a0: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
98b0: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
98c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98d0: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
98e0: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
98f0: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
9900: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9910: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20  E_IdxRealAsInt  
9920: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f   0x0010   /* Sto
9930: 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69  re REAL as INT i
9940: 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65  n indices */.#de
9950: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
9960: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
9970: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
9980: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
99a0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
99b0: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
99c0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
99d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
99e0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
99f0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
9a00: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
9a10: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
9a20: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
9a30: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
9a40: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
9a50: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
9a60: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
9a70: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
9a80: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
9a90: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
9aa0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
9ab0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
9ac0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
9ad0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
9ae0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
9af0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
9b00: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
9b10: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
9b20: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
9b30: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
9b40: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9b50: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
9b60: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
9b70: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
9b80: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
9b90: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
9ba0: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
9bb0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
9bc0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
9bd0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
9be0: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
9bf0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
9c00: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
9c10: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
9c20: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
9c30: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
9c40: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
9c50: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
9c60: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
9c70: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
9c80: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
9c90: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
9ca0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
9cb0: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
9cc0: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
9cd0: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
9ce0: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
9cf0: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
9d00: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
9d10: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
9d20: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
9d30: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
9d40: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
9d50: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
9d60: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
9d70: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
9d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
9d90: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
9da0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
9db0: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
9dc0: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
9dd0: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
9de0: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
9df0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
9e00: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
9e10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
9e20: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
9e30: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
9e40: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
9e50: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
9e60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
9e70: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
9e80: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
9e90: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
9ea0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
9eb0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
9ec0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
9ed0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
9ee0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
9ef0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
9f00: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
9f10: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
9f20: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
9f30: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
9f40: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
9f50: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
9f60: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
9f70: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
9f80: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
9f90: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
9fa0: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
9fb0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
9fc0: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
9fd0: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
9fe0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9ff0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
a000: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
a010: 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e 63 3b  /.  u8 iPrefEnc;
a020: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 65 66           /* Pref
a030: 65 72 72 65 64 20 74 65 78 74 20 65 6e 63 6f 64  erred text encod
a040: 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54 46 38  ing (SQLITE_UTF8
a050: 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20 2a 2f  , 16LE, 16BE) */
a060: 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20  .  u8 flags;    
a070: 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20          /* Some 
a080: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
a090: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
a0a0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
a0b0: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
a0c0: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
a0d0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
a0e0: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
a0f0: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
a100: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
a110: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
a120: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
a130: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
a140: 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e  ; /* Regular fun
a150: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a160: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
a170: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
a180: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
a190: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74 65  /* Aggregate ste
a1a0: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
a1b0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
a1c0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
a1e0: 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65  gregate finalize
a1f0: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  r */.  char *zNa
a200: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  me;         /* S
a210: 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  QL name of the f
a220: 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75  unction. */.  Fu
a230: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
a240: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
a250: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
a260: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
a270: 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74  sh */.  FuncDest
a280: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
a290: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
a2a0: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
a2b0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
a2c0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
a2d0: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
a2e0: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
a2f0: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
a300: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
a310: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
a320: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
a330: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
a340: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
a350: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
a360: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
a370: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
a380: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
a390: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
a3a0: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
a3b0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
a3c0: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
a3d0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
a3e0: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a  nRef is set to .
a3f0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
a400: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
a410: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
a420: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
a430: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
a440: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
a450: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
a460: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
a470: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
a480: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
a490: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
a4a0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
a4b0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
a4c0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
a4d0: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
a4e0: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
a4f0: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
a500: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
a510: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
a520: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
a530: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
a540: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
a550: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
a560: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
a570: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
a580: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
a590: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
a5a0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
a5b0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
a5c0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
a5d0: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
a5e0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
a5f0: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
a600: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
a610: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
a620: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
a630: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
a640: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
a650: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
a660: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
a670: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
a680: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
a690: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54  AG_TYPEOFARG.  T
a6a0: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
a6b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
a6c0: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
a6d0: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23  erify this..*/.#
a6e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a6f0: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 31  NC_LIKE     0x01
a700: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
a710: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
a720: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
a730: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
a740: 41 53 45 20 20 20 20 20 30 78 30 32 20 2f 2a 20  ASE     0x02 /* 
a750: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
a760: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
a770: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
a780: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
a790: 20 20 30 78 30 34 20 2f 2a 20 45 70 68 65 6d 65    0x04 /* Epheme
a7a0: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
a7b0: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
a7c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
a7d0: 45 44 43 4f 4c 4c 20 30 78 30 38 20 2f 2a 20 73  EDCOLL 0x08 /* s
a7e0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
a7f0: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
a800: 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  called */.#defin
a810: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a820: 55 4e 54 20 20 20 20 30 78 31 30 20 2f 2a 20 42  UNT    0x10 /* B
a830: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
a840: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
a850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a860: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 20  C_COALESCE 0x20 
a870: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
a880: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
a890: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
a8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a8b0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 34 30  NC_LENGTH   0x40
a8c0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
a8d0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
a8e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a8f0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
a900: 78 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x80 /* Built-in 
a910: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
a920: 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n */../*.** The 
a930: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
a940: 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
a950: 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
a960: 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
a970: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
a980: 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
a990: 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
a9a0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
a9b0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
a9c0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
a9d0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
a9e0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
a9f0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
aa00: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
aa10: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
aa20: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
aa30: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
aa40: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
aa50: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
aa60: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
aa70: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
aa80: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
aa90: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
aaa0: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
aab0: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
aac0: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
aad0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
aae0: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
aaf0: 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20  tion. If .**    
ab00: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
ab10: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
ab20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ab30: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
ab40: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
ab50: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
ab60: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
ab70: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
ab80: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
ab90: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
aba0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
abb0: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
abc0: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
abd0: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
abe0: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
abf0: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
ac00: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
ac10: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
ac20: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
ac30: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
ac40: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
ac50: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
ac60: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
ac70: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
ac80: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
ac90: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
aca0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
acb0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
acc0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
acd0: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
ace0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
acf0: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
ad00: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
ad10: 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74   C .**     funct
ad20: 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
ad30: 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
ad40: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
ad50: 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
ad60: 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
ad70: 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
ad80: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
ad90: 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
ada0: 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
adb0: 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
adc0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
add0: 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
ade0: 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
adf0: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
ae00: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
ae10: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
ae20: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
ae30: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
ae40: 46 38 2c 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f  F8, (bNC*SQLITE_
ae50: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
ae60: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ae70: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ae80: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae90: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
aea0: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
aeb0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
aec0: 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
aed0: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
aee0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
aef0: 20 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e   (bNC*SQLITE_FUN
af00: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
af10: 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
af20: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
af30: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
af40: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
af50: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
af60: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
af70: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
af80: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
af90: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
afa0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
afb0: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70  NEEDCOLL, \.   p
afc0: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
afd0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
afe0: 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  0}.#define LIKEF
aff0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
b000: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
b010: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
b020: 54 46 38 2c 20 66 6c 61 67 73 2c 20 28 76 6f 69  TF8, flags, (voi
b030: 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
b040: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
b050: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
b060: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
b070: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
b080: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
b090: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
b0a0: 54 45 5f 55 54 46 38 2c 20 6e 63 2a 53 51 4c 49  TE_UTF8, nc*SQLI
b0b0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
b0c0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
b0d0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
b0e0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
b0f0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f  l,#zName,0,0}../
b100: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
b110: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
b120: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
b130: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
b140: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
b150: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
b160: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
b170: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
b180: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
b190: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
b1a0: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
b1b0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
b1c0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
b1d0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
b1e0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
b1f0: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
b200: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b210: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b220: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
b230: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
b240: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
b250: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
b260: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
b270: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b280: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
b290: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 53 61  olations */.  Sa
b2a0: 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
b2d0: 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
b2e0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
b2f0: 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
b300: 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
b310: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
b320: 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
b330: 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
b340: 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
b350: 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
b360: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
b370: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
b380: 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
b390: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
b3a0: 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
b3b0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b3c0: 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
b3d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
b3e0: 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
b3f0: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
b400: 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
b410: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
b420: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b430: 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
b440: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
b450: 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
b460: 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
b470: 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
b480: 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
b490: 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
b4a0: 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
b4b0: 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
b4c0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
b4f0: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
b500: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
b510: 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b530: 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
b540: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
b550: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
b560: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
b570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
b580: 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
b590: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
b5a0: 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
b5b0: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
b5c0: 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
b5d0: 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
b5e0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
b5f0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
b600: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
b610: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b620: 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
b630: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
b640: 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
b650: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
b660: 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
b670: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  mn */.  char *zD
b680: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67  flt;     /* Orig
b690: 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
b6a0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a   default value *
b6b0: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  /.  char *zType;
b6c0: 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70       /* Data typ
b6d0: 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d  e for this colum
b6e0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
b6f0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
b700: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
b710: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
b720: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
b730: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
b740: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
b750: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
b760: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
b770: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
b780: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
b790: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
b7a0: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
b7b0: 75 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20  u16 colFlags;   
b7c0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
b7d0: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
b7e0: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
b7f0: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
b800: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
b810: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
b820: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
b830: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
b840: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
b850: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
b860: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
b870: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
b880: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
b890: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
b8a0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
b8b0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a  al table */../*.
b8c0: 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
b8d0: 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
b8e0: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
b8f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
b900: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
b910: 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
b920: 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
b930: 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
b940: 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
b950: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
b960: 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
b970: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
b980: 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
b990: 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
b9a0: 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
b9b0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
b9c0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
b9d0: 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
b9e0: 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
b9f0: 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
ba00: 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
ba10: 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
ba20: 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
ba30: 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
ba40: 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
ba50: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
ba60: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
ba70: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ba80: 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
ba90: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
bab0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
bac0: 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
bad0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
bae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
baf0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
bb00: 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
bb10: 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
bb20: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
bb30: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
bb40: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
bb50: 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
bb60: 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
bb70: 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
bb80: 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
bb90: 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
bba0: 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
bbb0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
bbc0: 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
bbd0: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
bbe0: 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
bbf0: 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
bc00: 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
bc10: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
bc20: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
bc30: 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
bc40: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
bc50: 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
bc60: 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
bc70: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
bc80: 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
bc90: 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
bca0: 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
bcb0: 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
bcc0: 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
bcd0: 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
bce0: 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
bcf0: 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
bd00: 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
bd10: 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  .  .**.** But ra
bd20: 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
bd30: 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
bd40: 62 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20  begin with 'a'. 
bd50: 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
bd60: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
bd70: 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
bd80: 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
bd90: 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
bda0: 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
bdb0: 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
bdc0: 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
bdd0: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
bde0: 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
bdf0: 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
be00: 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
be10: 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
be20: 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
be30: 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
be40: 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a  le comparison..*
be50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
be60: 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61  _AFF_TEXT     'a
be70: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
be80: 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62  _AFF_NONE     'b
be90: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
bea0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63  _AFF_NUMERIC  'c
beb0: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
bec0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64  _AFF_INTEGER  'd
bed0: 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  '.#define SQLITE
bee0: 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65  _AFF_REAL     'e
bef0: 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  '..#define sqlit
bf00: 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e  e3IsNumericAffin
bf10: 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51  ity(X)  ((X)>=SQ
bf20: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
bf30: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  )../*.** The SQL
bf40: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c  ITE_AFF_MASK val
bf50: 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68  ues masks off th
bf60: 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69  e significant bi
bf70: 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69  ts of an.** affi
bf80: 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a  nity value. .*/.
bf90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bfa0: 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37  FF_MASK     0x67
bfb0: 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
bfc0: 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
bfd0: 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
bfe0: 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
bff0: 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
c000: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
c010: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c020: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
c030: 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20   0x08  /* jumps 
c040: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
c050: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
c060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
c070: 45 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f  EP2      0x10  /
c080: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
c090: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
c0a0: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
c0b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
c0c0: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
c0d0: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
c0e0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
c0f0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
c100: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
c110: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
c120: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
c130: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
c140: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
c150: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c160: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
c170: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
c180: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
c190: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
c1a0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
c1b0: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
c1c0: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
c1d0: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
c1e0: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
c1f0: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
c200: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
c210: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
c220: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
c230: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
c240: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
c250: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
c260: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
c270: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
c280: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
c290: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
c2a0: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
c2b0: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
c2c0: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
c2d0: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
c2e0: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
c2f0: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
c300: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
c310: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
c320: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
c330: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
c340: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
c350: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
c360: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
c370: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
c380: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
c390: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
c3a0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
c3b0: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
c3c0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
c3d0: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
c3e0: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
c3f0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
c400: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
c410: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
c420: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
c430: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
c440: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
c450: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
c460: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
c470: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
c480: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
c490: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
c4a0: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
c4b0: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
c4c0: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
c4d0: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
c4e0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
c4f0: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
c500: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
c510: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
c520: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
c530: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
c540: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
c550: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
c560: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
c570: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
c580: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
c590: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
c5a0: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
c5b0: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
c5c0: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
c5d0: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
c5e0: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
c5f0: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
c600: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
c610: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
c620: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
c630: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
c640: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
c650: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
c660: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
c670: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
c680: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
c690: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
c6a0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
c6b0: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
c6c0: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
c6d0: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
c6e0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
c6f0: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
c700: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
c710: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
c720: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
c730: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
c740: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
c750: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
c760: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
c770: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
c780: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
c790: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
c7a0: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
c7b0: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
c7c0: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
c7d0: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
c7e0: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
c7f0: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
c800: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
c810: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
c820: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
c830: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
c840: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
c850: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
c860: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
c870: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
c880: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
c890: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
c8a0: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
c8b0: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
c8c0: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
c8d0: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
c8e0: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
c8f0: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
c900: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
c910: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
c920: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
c930: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
c940: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
c950: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
c960: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
c970: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
c980: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
c990: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
c9a0: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
c9b0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
c9c0: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
c9d0: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
c9e0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
c9f0: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
ca00: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
ca10: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
ca20: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
ca30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ca40: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
ca50: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
ca60: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
ca70: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
ca80: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
ca90: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
caa0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
cab0: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
cac0: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
cad0: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
cae0: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
caf0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
cb00: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
cb10: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
cb20: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
cb30: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
cb40: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
cb50: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
cb80: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
cb90: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
cba0: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
cbb0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
cbc0: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
cbd0: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
cbe0: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
cbf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
cc00: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
cc10: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
cc20: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
cc30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
cc40: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
cc50: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
cc60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  };../*.** Each S
cc70: 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  QL table is repr
cc80: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
cc90: 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  y by an instance
cca0: 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f   of the.** follo
ccb0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
ccc0: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d  **.** Table.zNam
ccd0: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
cce0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
ccf0: 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69   case of the ori
cd00: 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20  ginal.** CREATE 
cd10: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
cd20: 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63  is stored, but c
cd30: 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69  ase is not signi
cd40: 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f  ficant for.** co
cd50: 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mparisons..**.**
cd60: 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74   Table.nCol is t
cd70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
cd80: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
cd90: 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20  le.  Table.aCol 
cda0: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
cdb0: 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43  to an array of C
cdc0: 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73  olumn structures
cdd0: 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  , one for each c
cde0: 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  olumn..**.** If 
cdf0: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
ce00: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
ce10: 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65   KEY, then Table
ce20: 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e  .iPKey is the in
ce30: 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  dex of.** the co
ce40: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61  lumn that is tha
ce50: 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69  t key.   Otherwi
ce60: 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  se Table.iPKey i
ce70: 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74  s negative.  Not
ce80: 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
ce90: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52  tatype of the PR
cea0: 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62  IMARY KEY must b
ceb0: 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68  e INTEGER for th
cec0: 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62  is field to.** b
ced0: 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47  e set.  An INTEG
cee0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ER PRIMARY KEY i
cef0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f  s used as the ro
cf00: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
cf10: 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   of.** the table
cf20: 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61  .  If a table ha
cf30: 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49  s no INTEGER PRI
cf40: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61  MARY KEY, then a
cf50: 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a   random rowid.**
cf60: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f   is generated fo
cf70: 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
cf80: 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73  e table.  TF_Has
cf90: 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65  PrimaryKey is se
cfa0: 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  t if.** the tabl
cfb0: 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52  e has any PRIMAR
cfc0: 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f  Y KEY, INTEGER o
cfd0: 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a  r otherwise..**.
cfe0: 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73  ** Table.tnum is
cff0: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
d000: 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54   for the root BT
d010: 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  ree page of the 
d020: 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20  table in the.** 
d030: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
d040: 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20  If Table.iDb is 
d050: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
d060: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
d070: 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71  backend.** in sq
d080: 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69  lite.aDb[].  0 i
d090: 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  s for the main d
d0a0: 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73  atabase and 1 is
d0b0: 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68   for the file th
d0c0: 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70  at.** holds temp
d0d0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
d0e0: 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46   indices.  If TF
d0f0: 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65  _Ephemeral is se
d100: 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61  t.** then the ta
d110: 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ble is stored in
d120: 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20   a file that is 
d130: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
d140: 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68  leted.** when th
d150: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f  e VDBE cursor to
d160: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c   the table is cl
d170: 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63  osed.  In this c
d180: 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a  ase Table.tnum .
d190: 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63  ** refers VDBE c
d1a0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61  ursor number tha
d1b0: 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c  t holds the tabl
d1c0: 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74  e open, not to t
d1d0: 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  he root.** page 
d1e0: 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65  number.  Transie
d1f0: 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73  nt tables are us
d200: 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  ed to hold the r
d210: 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73  esults of a.** s
d220: 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70  ub-query that ap
d230: 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66  pears instead of
d240: 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61   a real table na
d250: 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  me in the FROM c
d260: 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53  lause .** of a S
d270: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
d280: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
d290: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
d2a0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
d2b0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
d2c0: 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
d2d0: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
d2e0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
d2f0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
d300: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
d310: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
d320: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
d330: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
d340: 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
d350: 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
d360: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
d370: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
d380: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
d390: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
d3a0: 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
d3b0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
d3c0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
d3d0: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
d3e0: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
d3f0: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
d400: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
d410: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
d420: 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lumn */.#ifndef 
d430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
d440: 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  K.  ExprList *pC
d450: 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
d460: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
d470: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52  s */.#endif.  tR
d480: 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20  owcnt nRowEst;  
d490: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
d4a0: 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
d4b0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
d4c0: 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  1 table */.  int
d4d0: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
d4e0: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
d4f0: 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61  node for this ta
d500: 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62  ble (see note ab
d510: 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50  ove) */.  i16 iP
d520: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
d530: 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
d540: 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
d550: 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72  y] as the primar
d560: 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e  y key */.  i16 n
d570: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
d580: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
d590: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
d5a0: 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
d5b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d5c0: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
d5d0: 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
d5e0: 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67   */.  u8 tabFlag
d5f0: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
d600: 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
d610: 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
d620: 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
d630: 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
d640: 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
d650: 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
d660: 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
d670: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
d680: 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
d690: 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
d6a0: 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
d6b0: 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
d6c0: 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
d6d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
d6e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
d6f0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
d700: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
d710: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
d720: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
d730: 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
d740: 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
d750: 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f  * Text of all mo
d760: 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69  dule args. [0] i
d770: 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f  s module name */
d780: 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
d790: 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
d7a0: 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
d7b0: 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
d7c0: 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
d7d0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
d7e0: 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
d7f0: 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
d800: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
d810: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
d820: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
d830: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
d840: 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
d850: 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
d860: 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
d870: 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
d880: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
d890: 73 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c  s for Tabe.tabFl
d8a0: 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags..*/.#define 
d8b0: 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20  TF_Readonly     
d8c0: 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65     0x01    /* Re
d8d0: 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
d8e0: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
d8f0: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
d900: 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e     0x02    /* An
d910: 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
d920: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48   */.#define TF_H
d930: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30  asPrimaryKey   0
d940: 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  x04    /* Table 
d950: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
d960: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
d970: 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
d980: 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0x08    /* Integ
d990: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
d9a0: 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
d9b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69  */.#define TF_Vi
d9c0: 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78  rtual         0x
d9d0: 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69  10    /* Is a vi
d9e0: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
d9f0: 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
da00: 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ee whether or no
da10: 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76  t a table is a v
da20: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
da30: 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61  his is.** done a
da40: 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61  s a macro so tha
da50: 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74  t it will be opt
da60: 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20  imized out when 
da70: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
da80: 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74   support is omit
da90: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
daa0: 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
dab0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
dac0: 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
dad0: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
dae0: 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
daf0: 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c  ags & TF_Virtual
db00: 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
db10: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
db20: 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67  ) (((X)->colFlag
db30: 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
db40: 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20  EN)!=0).#else.# 
db50: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
db60: 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64  l(X)      0.#  d
db70: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
db80: 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
db90: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
dba0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
dbb0: 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
dbc0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
dbd0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
dbe0: 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
dbf0: 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
dc00: 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
dc10: 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
dc20: 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
dc30: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
dc40: 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
dc50: 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
dc60: 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
dc70: 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
dc80: 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
dc90: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
dca0: 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
dcb0: 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
dcc0: 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
dcd0: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
dce0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
dcf0: 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
dd00: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
dd10: 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
dd20: 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
dd30: 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
dd40: 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
dd50: 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
dd60: 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
dd70: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
dd80: 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
dd90: 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
dda0: 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  ..**.** Each REF
ddb0: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
ddc0: 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
ddd0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
dde0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
ddf0: 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
de00: 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
de10: 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
de20: 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
de30: 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
de40: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
de50: 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
de60: 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
de70: 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
de80: 65 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  ecked..*/.struct
de90: 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
dea0: 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
deb0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
dec0: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
ded0: 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
dee0: 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
def0: 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
df00: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e  t foreign key in
df10: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
df20: 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
df30: 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
df40: 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
df50: 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
df60: 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
df70: 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
df80: 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f  xt foreign key o
df90: 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54  n table named zT
dfa0: 6f 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72  o */.  FKey *pPr
dfb0: 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76  evTo;    /* Prev
dfc0: 69 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79  ious foreign key
dfd0: 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20   on table named 
dfe0: 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
dff0: 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
e000: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
e010: 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
e020: 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
e030: 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
e040: 44 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20  Deferred;    /* 
e050: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
e060: 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
e070: 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
e080: 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
e090: 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  ion[2];         
e0a0: 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
e0b0: 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
e0c0: 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
e0d0: 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
e0e0: 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f  apTrigger[2];  /
e0f0: 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
e100: 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
e110: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
e120: 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69  lMap {  /* Mappi
e130: 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
e140: 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
e150: 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
e160: 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
e170: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
e180: 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
e190: 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
e1a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
e1b0: 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
e1c0: 6f 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49  o.  If 0 use PRI
e1d0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
e1e0: 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
e1f0: 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
e200: 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
e210: 6c 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  lumn s */.};../*
e220: 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
e230: 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
e240: 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
e250: 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
e260: 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
e270: 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
e280: 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
e290: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
e2a0: 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
e2b0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
e2c0: 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
e2d0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
e2e0: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
e2f0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
e300: 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
e310: 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
e320: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
e330: 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
e340: 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
e350: 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
e360: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
e370: 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
e380: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
e390: 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
e3a0: 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
e3b0: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
e3c0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
e3d0: 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
e3e0: 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
e3f0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
e400: 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
e410: 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
e420: 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
e430: 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
e440: 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
e450: 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
e460: 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
e470: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
e480: 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
e490: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
e4a0: 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
e4b0: 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
e4c0: 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
e4d0: 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
e4e0: 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
e4f0: 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
e500: 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
e510: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
e520: 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
e530: 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
e540: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
e550: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
e560: 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
e570: 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
e580: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
e590: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
e5a0: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
e5b0: 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
e5c0: 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
e5d0: 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
e5e0: 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
e5f0: 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
e600: 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
e610: 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
e620: 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
e630: 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
e640: 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
e650: 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
e660: 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
e670: 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
e680: 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
e690: 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
e6a0: 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
e6b0: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
e6c0: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
e6d0: 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
e6e0: 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
e6f0: 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
e700: 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
e710: 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
e720: 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20  ign key..** .** 
e730: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
e740: 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
e750: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
e760: 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
e770: 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
e780: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
e790: 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
e7a0: 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
e7b0: 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
e7c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
e7d0: 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
e7e0: 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
e7f0: 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
e800: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
e810: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
e820: 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
e830: 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
e840: 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
e850: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
e860: 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
e870: 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
e880: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
e890: 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
e8a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
e8b0: 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
e8c0: 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
e8d0: 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
e8e0: 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
e8f0: 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
e900: 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
e910: 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
e920: 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
e930: 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
e940: 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69  UPDATE */..#defi
e950: 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36  ne OE_Restrict 6
e960: 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
e970: 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
e980: 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
e990: 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
e9a0: 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20  e OE_SetNull  7 
e9b0: 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
e9c0: 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
e9d0: 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
e9e0: 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20  e OE_SetDflt  8 
e9f0: 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
ea00: 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
ea10: 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
ea20: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
ea30: 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63  ade  9   /* Casc
ea40: 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
ea50: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44  */..#define OE_D
ea60: 65 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44  efault  99  /* D
ea70: 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
ea80: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
ea90: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
eaa0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
eab0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
eac0: 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
ead0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
eae0: 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
eaf0: 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
eb00: 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
eb10: 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f  ntrol the .** co
eb20: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
eb30: 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
eb40: 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
eb50: 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  o {.  sqlite3 *d
eb60: 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
eb70: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
eb80: 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tion */.  u8 enc
eb90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
eba0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
ebb0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
ebc0: 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
ebd0: 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
ebe0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ebf0: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
ec00: 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20  aColl[] */.  u8 
ec10: 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
ec20: 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
ec30: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
ec40: 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   May be NULL */.
ec50: 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
ec60: 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
ec70: 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
ec80: 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
ec90: 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
eca0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
ecb0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
ecc0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
ecd0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
ece0: 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
ecf0: 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
ed00: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
ed10: 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
ed20: 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
ed30: 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
ed40: 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
ed50: 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
ed60: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
ed70: 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
ed80: 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
ed90: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
eda0: 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
edb0: 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
edc0: 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
edd0: 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
ede0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
edf0: 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
ee00: 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
ee10: 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
ee20: 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
ee30: 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
ee40: 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
ee50: 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
ee60: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
ee70: 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
ee80: 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
ee90: 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
eea0: 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
eeb0: 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
eec0: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  s..*/.struct Unp
eed0: 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
eee0: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
eef0: 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
ef00: 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
ef10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
ef20: 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
ef30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ef40: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d  f entries in apM
ef50: 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61  em[] */.  u8 fla
ef60: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
ef70: 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67   Boolean setting
ef80: 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e  s.  UNPACKED_...
ef90: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
efa0: 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  rowid;          
efb0: 2f 2a 20 55 73 65 64 20 62 79 20 55 4e 50 41 43  /* Used by UNPAC
efc0: 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
efd0: 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  H */.  Mem *aMem
efe0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
eff0: 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  lues */.};../*.*
f000: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
f010: 20 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f   of UnpackedReco
f020: 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  rd.flags.*/.#def
f030: 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  ine UNPACKED_INC
f040: 52 4b 45 59 20 20 20 20 20 20 20 30 78 30 31 20  RKEY       0x01 
f050: 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65   /* Make this ke
f060: 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72  y an epsilon lar
f070: 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ger */.#define U
f080: 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
f090: 41 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20 41  ATCH  0x02  /* A
f0a0: 20 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73   prefix match is
f0b0: 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a   considered OK *
f0c0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
f0d0: 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
f0e0: 20 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65   0x04  /* Ignore
f0f0: 20 66 69 6e 61 6c 20 28 72 6f 77 69 64 29 20 66   final (rowid) f
f100: 69 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  ield */../*.** E
f110: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
f120: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
f130: 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
f140: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f150: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
f160: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
f170: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
f180: 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
f190: 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
f1a0: 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
f1b0: 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
f1c0: 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
f1d0: 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
f1e0: 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
f1f0: 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
f200: 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
f210: 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
f220: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
f230: 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
f240: 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
f250: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
f260: 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
f270: 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
f280: 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
f290: 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
f2a0: 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
f2b0: 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
f2c0: 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
f2d0: 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
f2e0: 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
f2f0: 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
f300: 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
f310: 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
f320: 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
f330: 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
f340: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
f350: 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
f360: 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
f370: 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
f380: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
f390: 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
f3a0: 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
f3b0: 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
f3c0: 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
f3d0: 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
f3e0: 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
f3f0: 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
f400: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
f410: 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
f420: 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
f430: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
f440: 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
f450: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
f460: 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
f470: 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
f480: 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
f490: 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
f4a0: 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
f4b0: 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
f4c0: 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
f4d0: 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
f4e0: 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
f4f0: 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
f500: 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
f510: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
f520: 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
f530: 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
f540: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
f550: 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
f560: 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
f570: 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
f580: 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
f590: 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
f5a0: 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72   element..*/.str
f5b0: 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
f5c0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
f5d0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f5e0: 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
f5f0: 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b    int *aiColumn;
f600: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
f610: 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
f620: 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
f630: 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
f640: 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
f650: 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  wEst;       /* F
f660: 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
f670: 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
f680: 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
f690: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
f6a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
f6b0: 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
f6c0: 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
f6d0: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
f6e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
f6f0: 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
f700: 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
f710: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
f720: 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
f730: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
f740: 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
f750: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
f760: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
f770: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
f780: 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
f790: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
f7a0: 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
f7b0: 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
f7c0: 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
f7d0: 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
f7e0: 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
f7f0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
f800: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
f810: 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
f820: 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
f830: 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
f840: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
f850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
f860: 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
f870: 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
f880: 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c  ex */.  u16 nCol
f890: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
f8a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
f8b0: 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20 75  lumns in table u
f8c0: 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
f8d0: 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
f8e0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
f8f0: 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
f900: 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
f910: 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
f920: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75 74  /.  unsigned aut
f930: 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20  oIndex:2;    /* 
f940: 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
f950: 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
f960: 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
f970: 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
f980: 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
f990: 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
f9a0: 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
f9b0: 6f 6e 6c 79 20 2a 2f 0a 23 69 66 64 65 66 20 53  only */.#ifdef S
f9c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
f9d0: 54 33 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T3.  int nSample
f9e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f9f0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
fa00: 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
fa10: 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61 76   */.  tRowcnt av
fa20: 67 45 71 3b 20 20 20 20 20 20 20 20 20 20 20 2f  gEq;           /
fa30: 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
fa40: 6c 75 65 20 66 6f 72 20 6b 65 79 20 76 61 6c 75  lue for key valu
fa50: 65 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  es not in aSampl
fa60: 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
fa70: 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
fa80: 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
fa90: 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
faa0: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
fab0: 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
fac0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
fad0: 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
fae0: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
faf0: 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
fb00: 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
fb10: 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
fb20: 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
fb30: 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
fb40: 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
fb50: 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
fb60: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
fb70: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
fb80: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
fb90: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
fba0: 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a  ar *z;        /*
fbb0: 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20   Value if eType 
fbc0: 69 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20 6f  is SQLITE_TEXT o
fbd0: 72 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f  r SQLITE_BLOB */
fbe0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20  .    double r;  
fbf0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66       /* Value if
fc00: 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45   eType is SQLITE
fc10: 5f 46 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36  _FLOAT */.    i6
fc20: 34 20 69 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  4 i;          /*
fc30: 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20   Value if eType 
fc40: 69 73 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  is SQLITE_INTEGE
fc50: 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38  R */.  } u;.  u8
fc60: 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20   eType;         
fc70: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20  /* SQLITE_NULL, 
fc80: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e  SQLITE_INTEGER .
fc90: 2e 2e 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74  .. etc. */.  int
fca0: 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 2f   nByte;        /
fcb0: 2a 20 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f  * Size in byte o
fcc0: 66 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20  f text or blob. 
fcd0: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45 71  */.  tRowcnt nEq
fce0: 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  ;      /* Est. n
fcf0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
fd00: 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
fd10: 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
fd20: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b  /.  tRowcnt nLt;
fd30: 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75        /* Est. nu
fd40: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
fd50: 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
fd60: 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
fd70: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c  */.  tRowcnt nDL
fd80: 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  t;     /* Est. n
fd90: 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
fda0: 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
fdb0: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
fdc0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
fdd0: 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
fde0: 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
fdf0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
fe00: 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
fe10: 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
fe20: 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
fe30: 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
fe40: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
fe50: 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
fe60: 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
fe70: 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
fe80: 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
fe90: 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
fea0: 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
feb0: 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
fec0: 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
fed0: 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
fee0: 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
fef0: 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
ff00: 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
ff10: 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
ff20: 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
ff30: 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
ff40: 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
ff50: 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
ff60: 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
ff70: 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
ff80: 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
ff90: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
ffa0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
ffb0: 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
ffc0: 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
ffd0: 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
ffe0: 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
fff0: 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
10000 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
10010 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
10020 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
10030 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
10040 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
10050 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
10060 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
10070 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
10080 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
10090 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
100a0 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
100b0 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
100c0 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
100d0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
100e0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
100f0 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
10100 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
10110 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
10120 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
10130 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
10140 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
10150 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
10160 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
10170 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
10180 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
10190 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
101a0 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
101b0 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
101c0 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
101d0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
101e0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
101f0 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
10200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
10210 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
10220 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
10230 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
10260 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
10270 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
10280 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
10290 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
102a0 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
102b0 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
102c0 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
102d0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
10300 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10310 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
10320 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
10330 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
10340 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
10350 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
10360 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
10370 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
10380 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
10390 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
103a0 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
103b0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
103c0 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
103d0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  g index */.  Exp
103e0 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
103f0 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
10400 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
10410 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
10420 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
10430 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
10440 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
10450 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
10460 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
10470 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
10480 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
10490 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
104a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
104b0 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
104c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
104d0 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
104e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
104f0 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
10500 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10510 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
10520 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
10530 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
10540 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
10550 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
10560 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
10570 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
10580 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
10590 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
105a0 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
105b0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
105c0 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
105d0 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
105e0 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
105f0 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
10600 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10610 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
10620 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
10630 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
10640 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10650 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
10660 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
10670 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
106a0 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
106b0 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
106c0 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
106f0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
10700 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
10710 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
10720 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
10730 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
10740 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
10750 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
10760 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
10770 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
10780 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
10790 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
107a0 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
107b0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
107c0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
107d0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
107e0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
107f0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
10800 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
10810 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
10820 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
10830 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
10840 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
10850 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
10860 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
10870 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
10880 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10890 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
108a0 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
108b0 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
108c0 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
108d0 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
108e0 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
108f0 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
10900 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
10910 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
10920 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
10930 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
10940 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
10950 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
10960 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
10970 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
10980 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
10990 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
109a0 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
109b0 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
109c0 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
109d0 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
109e0 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
109f0 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
10a00 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
10a10 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
10a20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
10a30 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
10a40 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
10a50 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
10a60 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
10a70 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
10a80 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
10a90 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
10aa0 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
10ab0 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
10ac0 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
10ad0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
10ae0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
10af0 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
10b00 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
10b10 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
10b20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
10b30 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
10b40 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
10b50 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
10b60 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
10b70 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
10b80 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
10b90 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
10ba0 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
10bb0 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
10bc0 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
10bd0 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
10be0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
10bf0 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
10c00 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
10c10 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
10c20 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
10c30 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
10c40 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
10c50 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
10c60 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
10c70 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
10c80 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
10c90 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
10ca0 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
10cb0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
10cc0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
10cd0 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
10ce0 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
10cf0 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b  _BLOB, .** or TK
10d00 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
10d10 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
10d20 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
10d30 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
10d40 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
10d50 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
10d60 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
10d70 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
10d80 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a  n contains the .
10d90 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
10da0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
10db0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10dc0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
10dd0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
10de0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
10df0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
10e00 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
10e10 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
10e20 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
10e30 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
10e40 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
10e50 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
10e60 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
10e70 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
10e80 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
10e90 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
10ea0 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
10eb0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
10ec0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10ed0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
10ee0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
10ef0 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
10f00 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
10f10 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
10f20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
10f30 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
10f40 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
10f50 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10f60 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
10f70 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
10f80 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
10f90 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
10fa0 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
10fb0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
10fc0 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
10fd0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
10fe0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
10ff0 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
11000 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
11010 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69  List is .** vali
11020 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
11030 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
11040 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
11050 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
11060 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
11070 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
11080 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
11090 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
110a0 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
110b0 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
110c0 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
110d0 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
110e0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
110f0 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
11100 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
11110 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
11120 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
11130 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
11140 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
11150 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
11160 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
11170 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
11180 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
11190 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
111a0 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
111b0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
111c0 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
111d0 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
111e0 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
111f0 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
11200 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
11210 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
11220 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
11230 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
11240 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
11250 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27   .** character '
11260 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
11270 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
11280 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
11290 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  ds the index .**
112a0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
112b0 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
112c0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
112d0 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
112e0 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
112f0 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
11300 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
11310 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
11320 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
11330 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
11340 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
11350 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
11360 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
11370 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
11380 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
11390 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
113a0 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
113b0 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
113c0 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
113d0 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
113e0 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
113f0 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
11400 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
11410 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
11420 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
11430 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
11440 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
11450 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
11460 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
11470 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
11480 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
11490 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
114a0 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
114b0 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
114c0 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
114d0 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
114e0 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
114f0 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
11500 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
11510 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
11520 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
11530 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
11540 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
11550 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
11560 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
11570 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
11580 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
11590 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
115a0 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
115b0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
115c0 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
115d0 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
115e0 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
115f0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
11600 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11610 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
11620 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
11630 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
11640 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
11650 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
11660 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
11670 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
11680 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
11690 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
116a0 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
116b0 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
116c0 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
116d0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
116e0 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
116f0 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
11700 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
11710 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
11720 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
11730 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
11740 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
11750 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
11760 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
11770 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
11780 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
11790 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
117a0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
117b0 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
117c0 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
117d0 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
117e0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
117f0 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
11800 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
11810 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
11820 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
11830 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
11840 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
11850 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
11860 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36   column */.  u16
11870 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
11880 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
11890 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
118a0 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
118b0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
118c0 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
118d0 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
118e0 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
118f0 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
11900 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
11910 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
11920 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
11930 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
11940 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
11950 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
11960 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
11970 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11980 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11990 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
119a0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
119b0 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
119c0 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
119d0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
119e0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
119f0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11a00 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11a10 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a  nction. .  *****
11a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a60 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
11a70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
11a80 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
11a90 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
11aa0 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
11ab0 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
11ac0 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
11ad0 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
11ae0 2a 20 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  * Function argum
11af0 65 6e 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70  ents or in "<exp
11b00 72 3e 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73  r> IN (<expr-lis
11b10 74 29 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  t)" */.    Selec
11b20 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
11b30 2f 2a 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d  /* Used for sub-
11b40 73 65 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78  selects and "<ex
11b50 70 72 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e  pr> IN (<select>
11b60 29 22 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  )" */.  } x;..  
11b70 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
11b80 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
11b90 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
11ba0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
11bb0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
11bc0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
11bd0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
11be0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
11bf0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
11c00 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
11c10 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
11c20 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
11c30 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
11c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
11c80 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
11c90 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
11ca0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
11cb0 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
11cc0 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
11cd0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
11ce0 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
11cf0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
11d00 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
11d10 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
11d20 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
11d30 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
11d40 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11d50 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
11d60 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
11d90 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
11da0 2d 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61  -> old */.  ynVa
11db0 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
11dc0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
11dd0 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
11de0 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
11e10 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
11e20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
11e30 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
11e40 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
11e50 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
11e60 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
11e70 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
11e80 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
11e90 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
11ea0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
11eb0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
11ec0 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
11ed0 20 20 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20    u8 flags2;    
11ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f           /* Seco
11ef0 6e 64 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e  nd set of flags.
11f00 20 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75    EP2_... */.  u
11f10 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
11f20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
11f30 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
11f40 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
11f70 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
11f80 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
11f90 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11fb0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
11fc0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
11fd0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
11fe0 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
11ff0 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
12000 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
12010 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
12020 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
12030 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
12040 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
12050 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
12060 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
12070 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
12080 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
12090 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
120a0 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
120b0 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30   EP_FromJoin   0
120c0 78 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e  x0001  /* Origin
120d0 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
120e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
120f0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
12100 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78  EP_Agg        0x
12110 30 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0002  /* Contain
12120 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
12130 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12140 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
12150 52 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30  Resolved   0x000
12160 34 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  4  /* IDs have b
12170 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
12180 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
12190 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
121a0 20 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72   0x0008  /* Expr
121b0 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
121c0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
121d0 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
121e0 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30  _Distinct   0x00
121f0 31 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  10  /* Aggregate
12200 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
12210 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
12220 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
12230 72 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20  rSelect  0x0020 
12240 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
12250 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
12260 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
12270 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
12280 20 30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65   0x0040  /* toke
12290 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
122a0 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
122b0 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
122c0 75 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20  unc  0x0080  /* 
122d0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
122e0 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
122f0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
12300 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
12310 65 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20  e    0x0100  /* 
12320 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
12330 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72  TK_COLLATE opear
12340 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
12350 50 5f 46 69 78 65 64 44 65 73 74 20 20 30 78 30  P_FixedDest  0x0
12360 32 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e  200  /* Result n
12370 65 65 64 65 64 20 69 6e 20 61 20 73 70 65 63 69  eeded in a speci
12380 66 69 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  fic register */.
12390 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
123a0 6c 75 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a  lue   0x0400  /*
123b0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
123c0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
123d0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
123e0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78  EP_xIsSelect  0x
123f0 30 38 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65  0800  /* x.pSele
12400 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
12410 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
12420 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
12430 5f 48 69 6e 74 20 20 20 20 20 20 20 30 78 31 30  _Hint       0x10
12440 30 30 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20  00  /* Not used 
12450 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
12460 64 75 63 65 64 20 20 20 20 30 78 32 30 30 30 20  duced    0x2000 
12470 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
12480 69 73 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  is EXPR_REDUCEDS
12490 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
124a0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
124b0 65 6e 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20  enOnly  0x4000  
124c0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69  /* Expr struct i
124d0 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  s EXPR_TOKENONLY
124e0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
124f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
12500 61 74 69 63 20 20 20 20 20 30 78 38 30 30 30 20  atic     0x8000 
12510 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
12520 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
12530 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
12540 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
12550 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
12560 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
12570 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
12580 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  2 field..*/.#def
12590 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64  ine EP2_Malloced
125a0 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f  Token  0x0001  /
125b0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
125c0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
125d0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
125e0 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
125f0 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43      0x0002  /* C
12600 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
12610 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
12620 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65  /../*.** The pse
12630 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69  udo-routine sqli
12640 74 65 33 45 78 70 72 53 65 74 49 72 72 65 64 75  te3ExprSetIrredu
12650 63 69 62 6c 65 20 73 65 74 73 20 74 68 65 20 45  cible sets the E
12660 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a  P2_Irreducible.*
12670 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70  * flag on an exp
12680 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72  ression structur
12690 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69 73  e.  This flag is
126a0 20 75 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f   used for VV&A o
126b0 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75  nly.  The.** rou
126c0 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tine is implemen
126d0 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74  ted as a macro t
126e0 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77  hat only works w
126f0 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67  hen in debugging
12700 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20   mode,.** so as 
12710 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72  not to burden pr
12720 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a  oduction code..*
12730 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
12740 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
12750 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12760 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73  e(X)  (X)->flags
12770 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63  2 |= EP2_Irreduc
12780 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66  ible.#else.# def
12790 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
127a0 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66  ucible(X).#endif
127b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
127c0 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
127d0 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
127e0 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
127f0 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
12800 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
12810 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
12820 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
12830 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
12840 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
12850 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  prHasAnyProperty
12860 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
12870 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
12880 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
12890 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
128a0 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
128b0 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
128c0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
128d0 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
128e0 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
128f0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
12900 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
12910 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
12920 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
12930 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
12940 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
12950 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
12960 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
12970 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
12980 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
12990 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
129a0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
129b0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
129c0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
129d0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
129e0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
129f0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
12a00 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
12a10 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
12a20 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
12a30 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
12a40 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
12a50 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
12a60 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
12a70 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
12a80 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
12a90 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
12aa0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
12ab0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
12ac0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
12ad0 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
12ae0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
12af0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
12b00 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
12b10 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
12b20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
12b30 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
12b40 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
12b50 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
12b60 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
12b70 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
12b80 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
12b90 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
12ba0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
12bb0 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
12bc0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
12bd0 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
12be0 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
12bf0 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
12c00 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
12c10 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
12c20 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
12c30 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
12c40 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
12c50 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
12c60 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
12c70 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
12c80 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
12c90 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
12ca0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
12cb0 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
12cc0 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
12cd0 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
12ce0 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
12cf0 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
12d00 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
12d10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
12d20 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
12d30 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
12d40 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
12d50 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
12d60 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
12d70 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
12d80 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
12d90 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
12da0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
12db0 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
12dc0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
12dd0 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
12de0 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
12df0 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
12e00 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
12e10 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
12e20 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
12e30 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
12e40 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
12e50 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
12e60 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
12e70 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
12e80 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
12e90 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
12ea0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
12eb0 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
12ec0 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12ee0 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
12ef0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
12f00 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73   */.  int iECurs
12f10 6f 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  or;          /* 
12f20 56 44 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f  VDBE Cursor asso
12f30 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
12f40 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73   ExprList */.  s
12f50 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
12f60 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
12f70 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
12f80 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
12f90 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
12fa0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
12fb0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
12fc0 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
12fd0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
12fe0 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
12ff0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
13000 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
13010 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
13020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
13030 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
13040 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
13050 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
13060 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
13070 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
13080 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
13090 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
130a0 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
130b0 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
130c0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
130d0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
130e0 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
130f0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
13100 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
13110 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36  OLUMN */.    u16
13120 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
13130 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
13140 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
13150 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
13160 74 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c  t */.    u16 iAl
13170 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
13180 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
13190 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
131a0 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  r zName */.  } *
131b0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
131c0 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
131d0 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
131e0 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
131f0 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
13200 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
13210 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13220 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
13230 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
13240 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
13250 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
13260 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
13270 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
13280 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
13290 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
132a0 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
132b0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
132c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
132d0 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
132e0 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
132f0 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
13300 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
13310 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
13320 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
13330 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
13340 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
13350 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
13360 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
13370 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
13380 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
13390 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
133a0 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
133b0 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
133c0 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
133d0 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
133e0 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
133f0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
13400 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
13410 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
13420 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
13430 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
13440 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
13450 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
13460 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
13470 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
13480 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
13490 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
134a0 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
134b0 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
134c0 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
134d0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
134e0 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
134f0 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
13500 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
13510 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
13520 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13530 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
13540 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
13550 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
13560 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
13570 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
13580 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
13590 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
135a0 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
135b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
135c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
135d0 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
135e0 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
135f0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
13600 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
13610 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
13620 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
13630 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
13640 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
13650 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
13660 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
13670 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13680 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
13690 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
136a0 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
136b0 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
136c0 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
136d0 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
136e0 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
136f0 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
13700 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
13710 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
13720 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
13730 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
13740 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
13750 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
13760 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
13770 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65  on ix86..*/.type
13780 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
13790 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
137a0 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
137b0 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
137c0 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
137d0 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
137e0 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
137f0 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
13800 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
13810 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
13820 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52  describes the FR
13830 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
13840 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
13850 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f  .** Each table o
13860 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
13870 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
13880 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d   a separate elem
13890 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72  ent of.** the Sr
138a0 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e  cList.a[] array.
138b0 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20  .**.** With the 
138c0 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74  addition of mult
138d0 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75  iple database su
138e0 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  pport, the follo
138f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
13900 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  * can also be us
13910 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61  ed to describe a
13920 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
13930 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61  e such as the ta
13940 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d  ble that.** is m
13950 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e  odified by an IN
13960 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72  SERT, DELETE, or
13970 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
13980 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20  t.  In standard 
13990 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74  SQL,.** such a t
139a0 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73  able must be a s
139b0 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20  imple name: ID. 
139c0 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20   But in SQLite, 
139d0 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a  the table can.**
139e0 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69   now be identifi
139f0 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65  ed by a database
13a00 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68   name, a dot, th
13a10 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  en the table nam
13a20 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20  e: ID.ID..**.** 
13a30 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61  The jointype sta
13a40 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20  rts out showing 
13a50 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65  the join type be
13a60 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e  tween the curren
13a70 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74  t table.** and t
13a80 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e  he next table on
13a90 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20   the list.  The 
13aa0 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68  parser builds th
13ab0 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e  e list this way.
13ac0 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53  .** But sqlite3S
13ad0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
13ae0 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66  ype() later shif
13af0 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73  ts the jointypes
13b00 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a   so that each.**
13b10 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73   jointype expres
13b20 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74  ses the join bet
13b30 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61  ween the table a
13b40 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
13b50 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  table..**.** In 
13b60 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c  the colUsed fiel
13b70 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  d, the high-orde
13b80 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69  r bit (bit 63) i
13b90 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62  s set if the tab
13ba0 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d  le.** contains m
13bb0 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75  ore than 63 colu
13bc0 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74  mns and the 64-t
13bd0 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d  h or later colum
13be0 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74  n is used..*/.st
13bf0 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20  ruct SrcList {. 
13c00 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20 20 20   i16 nSrc;      
13c10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
13c20 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
13c30 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
13c40 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31 36 20  clause */.  i16 
13c50 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
13c60 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
13c70 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
13c80 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
13c90 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
13ca0 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
13cb0 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
13cc0 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
13cd0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
13ce0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
13cf0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
13d00 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
13d10 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
13d20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
13d30 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
13d40 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
13d50 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
13d60 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
13d70 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
13d80 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
13d90 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
13da0 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
13db0 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
13dc0 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
13dd0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
13de0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
13df0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
13e00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
13e10 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
13e20 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
13e30 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
13e40 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
13e50 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
13e60 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
13e70 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
13e80 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
13e90 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
13ea0 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
13eb0 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
13ec0 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  */.    u8 jointy
13ed0 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
13ee0 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
13ef0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
13f00 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
13f10 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
13f20 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
13f30 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
13f40 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
13f50 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e  clause */.    un
13f60 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
13f70 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
13f80 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
13f90 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
13fa0 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
13fb0 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
13fc0 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
13fd0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
13fe0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
13ff0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
14000 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
14010 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
14020 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
14030 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
14040 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
14050 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
14060 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14070 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
14080 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
14090 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
140a0 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
140b0 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
140c0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
140d0 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
140e0 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
140f0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
14100 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
14110 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
14120 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
14130 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
14140 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
14150 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b     char *zIndex;
14160 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69       /* Identifi
14170 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
14180 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
14190 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
141a0 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
141b0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
141c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
141d0 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
141e0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
141f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
14200 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
14210 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
14220 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
14230 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
14240 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
14250 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
14260 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
14270 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
14280 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
14290 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
142a0 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
142b0 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
142c0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
142d0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
142e0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
142f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
14300 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
14310 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
14320 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
14330 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
14340 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
14350 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
14360 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
14370 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
14380 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
14390 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
143a0 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
143b0 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
143c0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
143d0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
143e0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
143f0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
14400 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
14410 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
14420 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
14430 41 20 57 68 65 72 65 50 6c 61 6e 20 6f 62 6a 65  A WherePlan obje
14440 63 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  ct holds informa
14450 74 69 6f 6e 20 74 68 61 74 20 64 65 73 63 72 69  tion that descri
14460 62 65 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20  bes a lookup.** 
14470 73 74 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20  strategy..**.** 
14480 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 69  This object is i
14490 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 6f 70  ntended to be op
144a0 61 71 75 65 20 6f 75 74 73 69 64 65 20 6f 66 20  aque outside of 
144b0 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75  the where.c modu
144c0 6c 65 2e 0a 2a 2a 20 49 74 20 69 73 20 69 6e 63  le..** It is inc
144d0 6c 75 64 65 64 20 68 65 72 65 20 6f 6e 6c 79 20  luded here only 
144e0 73 6f 20 74 68 61 74 20 74 68 61 74 20 63 6f 6d  so that that com
144f0 70 69 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f 77 20  piler will know 
14500 68 6f 77 20 62 69 67 20 69 74 0a 2a 2a 20 69 73  how big it.** is
14510 2e 20 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 66  .  None of the f
14520 69 65 6c 64 73 20 69 6e 20 74 68 69 73 20 6f 62  ields in this ob
14530 6a 65 63 74 20 73 68 6f 75 6c 64 20 62 65 20 75  ject should be u
14540 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66 0a 2a  sed outside of.*
14550 2a 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f  * the where.c mo
14560 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  dule..**.** With
14570 69 6e 20 74 68 65 20 75 6e 69 6f 6e 2c 20 70 49  in the union, pI
14580 64 78 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  dx is only used 
14590 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45  when wsFlags&WHE
145a0 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72  RE_INDEXED is tr
145b0 75 65 2e 0a 2a 2a 20 70 54 65 72 6d 20 69 73 20  ue..** pTerm is 
145c0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77  only used when w
145d0 73 46 6c 61 67 73 26 57 48 45 52 45 5f 4d 55 4c  sFlags&WHERE_MUL
145e0 54 49 5f 4f 52 20 69 73 20 74 72 75 65 2e 20 20  TI_OR is true.  
145f0 41 6e 64 20 70 56 74 61 62 49 64 78 0a 2a 2a 20  And pVtabIdx.** 
14600 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
14610 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f  n wsFlags&WHERE_
14620 56 49 52 54 55 41 4c 54 41 42 4c 45 20 69 73 20  VIRTUALTABLE is 
14630 74 72 75 65 2e 20 20 49 74 20 69 73 20 6e 65 76  true.  It is nev
14640 65 72 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 74  er the.** case t
14650 68 61 74 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  hat more than on
14660 65 20 6f 66 20 74 68 65 73 65 20 63 6f 6e 64 69  e of these condi
14670 74 69 6f 6e 73 20 69 73 20 74 72 75 65 2e 0a 2a  tions is true..*
14680 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  /.struct WherePl
14690 61 6e 20 7b 0a 20 20 75 33 32 20 77 73 46 6c 61  an {.  u32 wsFla
146a0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
146b0 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 5f 2a        /* WHERE_*
146c0 20 66 6c 61 67 73 20 74 68 61 74 20 64 65 73 63   flags that desc
146d0 72 69 62 65 20 74 68 65 20 73 74 72 61 74 65 67  ribe the strateg
146e0 79 20 2a 2f 0a 20 20 75 31 36 20 6e 45 71 3b 20  y */.  u16 nEq; 
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14710 6f 66 20 3d 3d 20 63 6f 6e 73 74 72 61 69 6e 74  of == constraint
14720 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61  s */.  u16 nOBSa
14730 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
14740 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14750 6f 66 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d  of ORDER BY term
14760 73 20 73 61 74 69 73 66 69 65 64 20 2a 2f 0a 20  s satisfied */. 
14770 20 64 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20   double nRow;   
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
147a0 62 65 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72  ber of rows (for
147b0 20 45 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e   EQP) */.  union
147c0 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49   {.    Index *pI
147d0 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dx;             
147e0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77        /* Index w
147f0 68 65 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45  hen WHERE_INDEXE
14800 44 20 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20  D is true */.   
14810 20 73 74 72 75 63 74 20 57 68 65 72 65 54 65 72   struct WhereTer
14820 6d 20 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20  m *pTerm;       
14830 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
14840 74 65 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72  term for OR-sear
14850 63 68 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ch */.    sqlite
14860 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56  3_index_info *pV
14870 74 61 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74  tabIdx;  /* Virt
14880 75 61 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20  ual table index 
14890 74 6f 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b  to use */.  } u;
148a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65  .};../*.** For e
148b0 61 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20  ach nested loop 
148c0 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  in a WHERE claus
148d0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
148e0 2c 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a  , the WhereInfo.
148f0 2a 2a 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ** structure con
14900 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69  tains a single i
14910 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
14920 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 69 73  structure.  This
14930 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
14940 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
14950 70 72 69 76 61 74 65 20 74 6f 20 74 68 65 20 77  private to the w
14960 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e  here.c module an
14970 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  d should not be.
14980 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64  ** access or mod
14990 69 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d  ified by other m
149a0 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  odules..**.** Th
149b0 65 20 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64  e pIdxInfo field
149c0 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
149d0 20 70 69 63 6b 20 74 68 65 20 62 65 73 74 20 69   pick the best i
149e0 6e 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72  ndex on a.** vir
149f0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
14a00 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65   pIdxInfo pointe
14a10 72 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78  r contains index
14a20 69 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ing.** informati
14a30 6f 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  on for the i-th 
14a40 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f  table in the FRO
14a50 4d 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20  M clause before 
14a60 72 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41  reordering..** A
14a70 6c 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20  ll the pIdxInfo 
14a80 70 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65  pointers are fre
14a90 65 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46  ed by whereInfoF
14aa0 72 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63  ree() in where.c
14ab0 2e 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69  ..** All other i
14ac0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68  nformation in th
14ad0 65 20 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65  e i-th WhereLeve
14ae0 6c 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  l object for the
14af0 20 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61   i-th table.** a
14b00 66 74 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65  fter FROM clause
14b10 20 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74   ordering..*/.st
14b20 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20  ruct WhereLevel 
14b30 7b 0a 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c  {.  WherePlan pl
14b40 61 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65  an;       /* que
14b50 72 79 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73  ry plan for this
14b60 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
14b70 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
14b80 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20   int iLeftJoin; 
14b90 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
14ba0 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d   cell used to im
14bb0 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54  plement LEFT OUT
14bc0 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74  ER JOIN */.  int
14bd0 20 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20   iTabCur;       
14be0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14bf0 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63  ursor used to ac
14c00 63 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a  cess the table *
14c10 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b  /.  int iIdxCur;
14c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14c30 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65   VDBE cursor use
14c40 64 20 74 6f 20 61 63 63 65 73 73 20 70 49 64 78  d to access pIdx
14c50 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72   */.  int addrBr
14c60 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  k;          /* J
14c70 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61  ump here to brea
14c80 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f  k out of the loo
14c90 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e  p */.  int addrN
14ca0 78 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt;          /* 
14cb0 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61  Jump here to sta
14cc0 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63  rt the next IN c
14cd0 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20  ombination */.  
14ce0 69 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20  int addrCont;   
14cf0 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
14d00 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77  re to continue w
14d10 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f  ith the next loo
14d20 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74  p cycle */.  int
14d30 20 61 64 64 72 46 69 72 73 74 3b 20 20 20 20 20   addrFirst;     
14d40 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74     /* First inst
14d50 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72  ruction of inter
14d60 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  ior of the loop 
14d70 2a 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20  */.  u8 iFrom;  
14d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
14d90 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ich entry in the
14da0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
14db0 20 20 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20    u8 op, p5;    
14dc0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
14dd0 65 20 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20  e and P5 of the 
14de0 6f 70 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73  opcode that ends
14df0 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69   the loop */.  i
14e00 6e 74 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20  nt p1, p2;      
14e10 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73       /* Operands
14e20 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75   of the opcode u
14e30 73 65 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20  sed to ends the 
14e40 6c 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  loop */.  union 
14e50 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
14e60 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  /* Information t
14e70 68 61 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70  hat depends on p
14e80 6c 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20  lan.wsFlags */. 
14e90 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
14ea0 20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20    int nIn;      
14eb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14ec0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14ed0 61 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20  aInLoop[] */.   
14ee0 20 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70     struct InLoop
14ef0 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69   {.        int i
14f00 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
14f10 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
14f20 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 69  rsor used by thi
14f30 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  s IN operator */
14f40 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64  .        int add
14f50 72 49 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20  rInTop;         
14f60 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e  /* Top of the IN
14f70 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20   loop */.       
14f80 20 75 38 20 65 45 6e 64 4c 6f 6f 70 4f 70 3b 20   u8 eEndLoopOp; 
14f90 20 20 20 20 20 20 20 20 2f 2a 20 49 4e 20 4c 6f          /* IN Lo
14fa0 6f 70 20 74 65 72 6d 69 6e 61 74 6f 72 2e 20 4f  op terminator. O
14fb0 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
14fc0 76 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49  v */.      } *aI
14fd0 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nLoop;          
14fe0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
14ff0 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65  about each neste
15000 64 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  d IN operator */
15010 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20  .    } in;      
15020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
15030 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46  ed when plan.wsF
15040 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42  lags&WHERE_IN_AB
15050 4c 45 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  LE */.    Index 
15060 2a 70 43 6f 76 69 64 78 3b 20 20 20 20 20 20 20  *pCovidx;       
15070 2f 2a 20 50 6f 73 73 69 62 6c 65 20 63 6f 76 65  /* Possible cove
15080 72 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 57  ring index for W
15090 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f  HERE_MULTI_OR */
150a0 0a 20 20 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65  .  } u;.  double
150b0 20 72 4f 70 74 43 6f 73 74 3b 20 20 20 20 20 20   rOptCost;      
150c0 2f 2a 20 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73  /* "Optimal" cos
150d0 74 20 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c  t for this level
150e0 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f   */..  /* The fo
150f0 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73  llowing field is
15100 20 72 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74   really not part
15110 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
15120 6c 65 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a  level.  But.  **
15130 20 77 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65   we need a place
15140 20 74 6f 20 63 61 63 68 65 20 76 69 72 74 75 61   to cache virtua
15150 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 69 6e  l table index in
15160 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61  formation for ea
15170 63 68 0a 20 20 2a 2a 20 76 69 72 74 75 61 6c 20  ch.  ** virtual 
15180 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f  table in the FRO
15190 4d 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  M clause and the
151a0 20 57 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75   WhereLevel stru
151b0 63 74 75 72 65 20 69 73 0a 20 20 2a 2a 20 61 20  cture is.  ** a 
151c0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
151d0 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   since there is 
151e0 6f 6e 65 20 57 68 65 72 65 4c 65 76 65 6c 20 66  one WhereLevel f
151f0 6f 72 20 65 61 63 68 20 46 52 4f 4d 20 63 6c 61  or each FROM cla
15200 75 73 65 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74  use.  ** element
15210 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
15220 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64  _index_info *pId
15230 78 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78  xInfo;  /* Index
15240 20 69 6e 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73   info for n-th s
15250 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  ource table */.}
15260 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  ;../*.** Flags a
15270 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
15280 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
15290 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
152a0 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
152b0 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
152c0 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
152d0 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
152e0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
152f0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
15300 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
15310 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
15320 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
15330 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
15340 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
15350 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
15360 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
15370 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
15380 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
15390 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
153a0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
153b0 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
153c0 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
153d0 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
153e0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
153f0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
15400 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
15410 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
15420 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
15430 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
15440 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
15450 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
15460 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
15470 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
15480 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
15490 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
154a0 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
154b0 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
154c0 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
154d0 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
154e0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
154f0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
15500 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
15510 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
15520 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
15530 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
15540 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
15550 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
15560 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
15570 65 72 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  erms */../*.** T
15580 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
15590 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69  processing routi
155a0 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65  ne has two halve
155b0 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74  s.  The.** first
155c0 20 70 61 72 74 20 64 6f 65 73 20 74 68 65 20 73   part does the s
155d0 74 61 72 74 20 6f 66 20 74 68 65 20 57 48 45 52  tart of the WHER
155e0 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73  E loop and the s
155f0 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f  econd.** half do
15600 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74  es the tail of t
15610 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20  he WHERE loop.  
15620 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  An instance of.*
15630 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
15640 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20   is returned by 
15650 74 68 65 20 66 69 72 73 74 20 68 61 6c 66 20 61  the first half a
15660 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74  nd passed.** int
15670 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c  o the second hal
15680 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63  f to give some c
15690 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74  ontinuity..*/.st
156a0 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b  ruct WhereInfo {
156b0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
156c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
156d0 50 61 72 73 69 6e 67 20 61 6e 64 20 63 6f 64 65  Parsing and code
156e0 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74   generating cont
156f0 65 78 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ext */.  SrcList
15700 20 2a 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20   *pTabList;     
15710 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61     /* List of ta
15720 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
15730 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74   */.  u16 nOBSat
15740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15750 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44  /* Number of ORD
15760 45 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69  ER BY terms sati
15770 73 66 69 65 64 20 62 79 20 69 6e 64 69 63 65 73  sfied by indices
15780 20 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46   */.  u16 wctrlF
15790 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
157a0 2f 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61  /* Flags origina
157b0 6c 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71  lly passed to sq
157c0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
157d0 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50  ) */.  u8 okOneP
157e0 61 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ass;            
157f0 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e   /* Ok to use on
15800 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d  e-pass algorithm
15810 20 66 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45   for UPDATE/DELE
15820 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73  TE */.  u8 untes
15830 74 65 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20  tedTerms;       
15840 20 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45    /* Not all WHE
15850 52 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65  RE terms resolve
15860 64 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20  d by outer loop 
15870 2a 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63  */.  u8 eDistinc
15880 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
15890 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45  * One of the WHE
158a0 52 45 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61  RE_DISTINCT_* va
158b0 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  lues below */.  
158c0 69 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20  int iTop;       
158d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
158e0 20 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20   very beginning 
158f0 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f  of the WHERE loo
15900 70 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74  p */.  int iCont
15910 69 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  inue;           
15920 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
15930 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e   continue with n
15940 65 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  ext record */.  
15950 69 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20  int iBreak;     
15960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
15970 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
15980 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
15990 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b  */.  int nLevel;
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
159b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
159c0 65 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72  ed loop */.  str
159d0 75 63 74 20 57 68 65 72 65 43 6c 61 75 73 65 20  uct WhereClause 
159e0 2a 70 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70  *pWC;  /* Decomp
159f0 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57  osition of the W
15a00 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
15a10 20 73 74 72 75 63 74 20 57 68 65 72 65 4c 6f 6f   struct WhereLoo
15a20 70 20 2a 70 4c 6f 6f 70 73 3b 20 2f 2a 20 4c 69  p *pLoops; /* Li
15a30 73 74 20 6f 66 20 61 6c 6c 20 57 68 65 72 65 4c  st of all WhereL
15a40 6f 6f 70 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  oop objects */. 
15a50 20 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75   double savedNQu
15a60 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50  eryLoop;   /* pP
15a70 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70  arse->nQueryLoop
15a80 20 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45   outside the WHE
15a90 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75  RE loop */.  dou
15aa0 62 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20  ble nRowOut;    
15ab0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
15ac0 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75  ted number of ou
15ad0 74 70 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57  tput rows */.  W
15ae0 68 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20  hereLevel a[1]; 
15af0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f           /* Info
15b00 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
15b10 63 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20  ch nest loop in 
15b20 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  WHERE */.};../* 
15b30 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
15b40 6f 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69  or WhereInfo.eDi
15b50 73 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69  stinct and Disti
15b60 6e 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65  nctCtx.eTnctType
15b70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15b80 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
15b90 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
15ba0 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
15bb0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
15bc0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
15bd0 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
15be0 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
15bf0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15c00 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
15c10 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
15c20 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
15c30 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
15c40 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
15c50 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
15c60 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
15c70 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
15c80 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
15c90 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
15ca0 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
15cb0 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
15cc0 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
15cd0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
15ce0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
15cf0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
15d00 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
15d10 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
15d20 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
15d30 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
15d40 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
15d50 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
15d60 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
15d70 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
15d80 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
15d90 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
15da0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
15db0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
15dc0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
15dd0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
15de0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
15df0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
15e00 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
15e10 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
15e20 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
15e30 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
15e40 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
15e50 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
15e60 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
15e70 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
15e80 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
15e90 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
15ea0 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
15eb0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
15ec0 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
15ed0 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
15ee0 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
15ef0 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
15f00 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
15f10 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
15f20 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
15f30 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
15f40 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
15f50 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
15f60 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
15f70 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
15f80 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
15f90 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
15fa0 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
15fb0 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
15fc0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
15fd0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
15fe0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
15ff0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
16000 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
16010 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
16020 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
16030 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
16040 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
16050 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
16060 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
16070 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
16080 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
16090 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
160a0 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
160b0 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
160c0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
160d0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
160e0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
160f0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
16100 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
16110 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
16120 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
16130 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
16140 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
16150 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
16160 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
16170 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d  onal list of nam
16180 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  ed expressions *
16190 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
161a0 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
161b0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
161c0 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
161d0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
161e0 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
161f0 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
16200 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
16210 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
16220 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
16230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16240 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
16250 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
16260 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
16270 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
16280 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
16290 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
162a0 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
162b0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e   names */.  u8 n
162c0 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
162d0 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
162e0 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
162f0 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
16300 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
16310 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
16320 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
16330 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
16340 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
16350 20 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67    0x01    /* Agg
16360 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
16370 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
16380 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
16390 48 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20  HasAgg    0x02  
163a0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
163b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
163c0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
163d0 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
163e0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75    0x04    /* Tru
163f0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
16400 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
16410 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
16420 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
16430 6e 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72  nc 0x08    /* Tr
16440 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
16450 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
16460 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
16470 69 6e 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20  ine NC_AsMaybe  
16480 20 30 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f   0x10    /* Reso
16490 6c 76 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20  lve to AS terms 
164a0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
164b0 74 20 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20  t only.         
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68      ** if no oth
164e0 65 72 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73  er resolution is
164f0 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f   available */../
16500 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
16510 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
16520 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
16530 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
16540 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
16550 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
16560 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
16570 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
16580 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
16590 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
165a0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
165b0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
165c0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
165d0 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
165e0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
165f0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
16600 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
16610 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
16620 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
16630 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
16640 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
16650 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
16660 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
16670 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
16680 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
16690 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
166a0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
166b0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
166c0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
166d0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
166e0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
166f0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
16700 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
16710 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
16720 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
16730 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
16740 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
16750 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
16760 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
16770 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
16780 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
16790 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
167a0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
167b0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
167c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
167d0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
167e0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
167f0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
16800 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
16810 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
16820 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
16830 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
16840 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
16850 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
16860 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
16870 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
16880 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
16890 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
168a0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
168b0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
168c0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
168d0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
168e0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
168f0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
16900 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
16910 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
16920 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
16930 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
16940 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
16950 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
16960 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
16970 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
16980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16990 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
169a0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
169b0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
169c0 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c  EPT */.  u16 sel
169d0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
169e0 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
169f0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
16a00 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
16a10 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
16a20 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
16a30 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
16a40 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
16a50 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b  addrOpenEphm[3];
16a60 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
16a70 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
16a80 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
16a90 74 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53  t */.  double nS
16aa0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
16ab0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
16ac0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
16ad0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
16ae0 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
16af0 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
16b00 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
16b10 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
16b20 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
16b30 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
16b40 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
16b50 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
16b60 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
16b70 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
16b80 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
16b90 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
16ba0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
16bb0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
16bc0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
16bd0 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
16be0 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
16bf0 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16c00 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16c10 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
16c20 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
16c30 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
16c40 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
16c50 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65  mpound */.  Sele
16c60 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20  ct *pRightmost; 
16c70 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74     /* Right-most
16c80 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
16c90 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
16ca0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  tement */.  Expr
16cb0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
16cc0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
16cd0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
16ce0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
16cf0 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
16d00 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
16d10 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
16d20 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
16d30 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed. */.};../*.**
16d40 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16d50 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
16d60 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
16d70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
16d80 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
16d90 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
16da0 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
16db0 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
16dc0 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
16dd0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
16de0 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
16df0 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
16e00 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
16e10 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
16e20 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
16e30 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
16e40 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
16e50 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16e60 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
16e70 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
16e80 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
16e90 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
16ea0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
16eb0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
16ec0 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
16ed0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
16ee0 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
16ef0 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
16f00 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
16f10 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
16f20 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
16f30 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
16f40 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
16f50 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20   SF_UseSorter   
16f60 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53      0x0040  /* S
16f70 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74  ort using a sort
16f80 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  er */.#define SF
16f90 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
16fa0 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
16fb0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
16fc0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
16fd0 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61  efine SF_Materia
16fe0 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20  lize     0x0100 
16ff0 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69   /* Force materi
17000 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65  alization of vie
17010 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
17020 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
17030 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74   0x0200  /* Part
17040 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
17050 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
17060 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
17070 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65  esults of a sele
17080 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  ct can be distri
17090 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
170a0 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22   ways.  The.** "
170b0 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
170c0 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
170d0 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Type"..*/.#defi
170e0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
170f0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
17100 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
17110 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
17120 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
17130 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
17140 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
17150 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
17160 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
17170 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
17180 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
17190 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
171a0 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
171b0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
171c0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
171d0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
171e0 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65  where */../* The
171f0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
17200 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
17210 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
17220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
17230 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
17240 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
17250 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69  _Discard)..#defi
17260 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20  ne SRT_Output   
17270 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74      5  /* Output
17280 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73   each row of res
17290 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
172a0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20  RT_Mem          
172b0 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  6  /* Store resu
172c0 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63  lt in a memory c
172d0 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ell */.#define S
172e0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20  RT_Set          
172f0 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
17300 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61  lts as keys in a
17310 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
17320 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
17330 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20      8  /* Store 
17340 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
17350 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
17360 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
17370 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
17380 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20     9  /* Create 
17390 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
173a0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
173b0 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
173c0 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
173d0 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74    10  /* Generat
173e0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
173f0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a  f result */../*.
17400 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17410 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65  f this object de
17420 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f  scribes where to
17430 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75   put of the resu
17440 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45  lts of.** a SELE
17450 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
17460 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65  .struct SelectDe
17470 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b  st {.  u8 eDest;
17480 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
17490 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
174a0 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
174b0 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
174c0 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
174d0 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74  ;     /* Affinit
174e0 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
174f0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
17500 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
17510 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
17520 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
17530 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
17540 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
17550 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73  t;        /* Bas
17560 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
17570 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
17580 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
17590 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dst;        /* N
175a0 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
175b0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
175c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
175d0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
175e0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
175f0 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
17600 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
17610 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
17620 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
17630 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
17640 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
17650 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
17660 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
17670 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
17680 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
17690 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
176a0 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
176b0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
176c0 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
176d0 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
176e0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
176f0 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
17700 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
17710 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
17720 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
17730 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
17740 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
17750 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
17760 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
17770 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
17780 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
17790 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
177a0 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
177b0 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
177c0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
177d0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
177e0 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
177f0 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
17800 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
17810 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
17820 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
17830 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
17840 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
17850 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
17860 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
17870 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
17880 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
17890 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
178a0 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
178b0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
178c0 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
178d0 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
178e0 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
178f0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
17900 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
17910 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
17920 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
17930 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
17940 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
17950 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
17960 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
17970 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
17980 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
17990 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
179a0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
179b0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
179c0 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
179d0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
179e0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
179f0 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
17a00 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
17a10 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
17a20 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
17a30 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
17a40 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
17a50 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
17a60 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
17a70 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
17a80 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
17a90 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
17aa0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
17ab0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
17ac0 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
17ad0 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
17ae0 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
17af0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
17b00 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
17b10 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
17b20 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
17b30 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
17b40 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
17b50 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
17b60 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
17b70 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
17b80 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
17b90 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
17ba0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
17bb0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
17bc0 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
17bd0 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
17be0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
17bf0 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
17c00 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
17c10 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
17c20 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
17c30 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
17c40 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
17c50 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
17c60 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
17c70 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
17c80 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
17c90 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
17ca0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
17cb0 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
17cc0 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
17cd0 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
17ce0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
17cf0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
17d00 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
17d10 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
17d20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
17d30 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
17d40 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
17d50 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
17d60 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
17d70 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
17d80 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
17d90 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
17da0 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
17db0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
17dc0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
17dd0 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
17de0 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
17df0 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
17e00 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
17e10 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
17e20 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
17e30 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
17e40 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
17e50 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
17e60 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
17e70 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
17e80 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
17e90 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c  30.  typedef sql
17ea0 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d  ite3_uint64 yDbM
17eb0 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
17ec0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
17ed0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69  t yDbMask;.#endi
17ee0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
17ef0 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
17f00 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
17f10 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
17f20 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
17f30 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
17f40 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
17f50 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
17f60 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
17f70 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
17f80 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
17f90 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
17fa0 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
17fb0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
17fc0 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
17fd0 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
17fe0 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
17ff0 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
18000 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
18010 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
18020 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
18030 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
18040 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
18050 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
18060 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
18070 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
18080 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
18090 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
180a0 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
180b0 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
180c0 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
180d0 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
180e0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a  e shared-cache .
180f0 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
18100 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
18110 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
18120 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
18130 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
18140 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
18150 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
18160 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
18170 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
18180 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
18190 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
181a0 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
181b0 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
181c0 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
181d0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
181e0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
181f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18200 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
18210 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
18220 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
18230 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
18240 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
18250 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
18260 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
18270 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
18280 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
18290 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
182a0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
182b0 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
182c0 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
182d0 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
182e0 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
182f0 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
18300 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
18310 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
18320 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
18330 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
18340 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
18350 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
18360 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
18370 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18380 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
18390 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
183a0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
183b0 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
183c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
183d0 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
183e0 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
183f0 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
18400 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
18410 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
18420 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
18430 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
18440 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
18450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18460 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
18470 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
18480 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20   u8 iColCache;  
18490 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
184a0 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  try in aColCache
184b0 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f  [] to replace */
184c0 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
184d0 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
184e0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
184f0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
18500 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
18510 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
18520 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
18530 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
18540 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
18550 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  xception */.  in
18560 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
18570 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
18580 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
18590 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
185a0 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
185b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
185c0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
185d0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
185e0 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
185f0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
18600 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
18610 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
18620 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
18630 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
18640 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
18650 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
18660 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
18670 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
18680 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
18690 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
186a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
186b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
186c0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
186d0 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
186e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
186f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18700 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
18710 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
18720 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
18730 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18740 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
18750 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
18760 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
18770 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
18780 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
18790 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
187a0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
187b0 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
187c0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
187d0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
187e0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
187f0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
18800 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
18810 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
18820 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
18830 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
18840 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63  alues */.  struc
18850 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
18860 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
18870 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
18880 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
18890 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
188a0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
188b0 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
188c0 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
188d0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
188e0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
188f0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
18900 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
18910 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
18920 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
18930 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
18940 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18960 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
18970 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
18980 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
18990 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
189a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
189b0 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
189c0 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
189d0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
189e0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
189f0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
18a00 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
18a10 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
18a20 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d   entry */.  yDbM
18a30 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
18a40 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
18a50 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
18a60 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
18a70 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
18a80 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
18a90 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
18aa0 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
18ab0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
18ac0 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20  ieGoto;      /* 
18ad0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f  Address of OP_Go
18ae0 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72  to to cookie ver
18af0 69 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65  ifier subroutine
18b00 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
18b10 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
18b20 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
18b30 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
18b40 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
18b50 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
18b60 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
18b70 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
18b80 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
18b90 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
18ba0 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
18bb0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
18bc0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
18bd0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
18be0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
18bf0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
18c00 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
18c10 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
18c20 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
18c30 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ram */.  Token c
18c40 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
18c50 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
18c60 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
18c70 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
18c80 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18c90 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
18ca0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
18cb0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
18cc0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
18cd0 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
18ce0 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
18cf0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
18d00 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
18d10 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
18d20 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
18d30 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
18d40 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
18d50 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
18d60 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
18d70 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
18d80 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
18d90 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
18da0 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
18db0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
18dc0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
18dd0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
18de0 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
18df0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
18e00 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
18e10 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
18e20 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
18e30 20 66 6f 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65   for */.  double
18e40 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f   nQueryLoop;   /
18e50 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
18e60 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
18e70 20 6f 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   of a query */. 
18e80 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
18e90 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
18ea0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
18eb0 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
18ec0 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
18ed0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
18ee0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
18ef0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
18f00 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
18f10 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
18f20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
18f30 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
18f40 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
18f50 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
18f60 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
18f70 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
18f80 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
18f90 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
18fa0 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
18fb0 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  iggers */..  /* 
18fc0 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
18fd0 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
18fe0 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
18ff0 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
19000 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
19010 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20   recursion */.. 
19020 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20   int nVar;      
19030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19040 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
19050 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
19060 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
19070 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20    int nzVar;    
19080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19090 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62  umber of availab
190a0 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61  le slots in azVa
190b0 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  r[] */.  u8 expl
190c0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
190d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
190e0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
190f0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
19100 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
19110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
19120 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
19130 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
19140 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
19150 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
19160 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
19170 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
19180 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19190 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
191a0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
191b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
191c0 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
191d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
191e0 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
191f0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
19200 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19220 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
19230 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
19240 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
19250 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
19260 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
19270 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
19280 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
19290 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
192a0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
192b0 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
192c0 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
192d0 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
192e0 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
192f0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
19300 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
19310 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
19320 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
19330 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
19340 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
19350 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
19360 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
19370 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
19380 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
19390 72 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  re()) */.  int *
193a0 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  aAlias;         
193b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
193c0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c   used to hold al
193d0 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a  iased result */.
193e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
193f0 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
19400 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
19410 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
19420 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
19430 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
19440 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
19450 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
19460 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
19470 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
19480 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
19490 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
194a0 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
194b0 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
194c0 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
194d0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
194e0 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
194f0 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
19500 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
19510 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
19520 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
19530 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
19540 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
19550 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
19560 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
19570 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
19580 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
19590 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
195a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
195b0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
195c0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
195d0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
195e0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
195f0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
19600 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
19610 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
19620 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
19630 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
19640 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
19650 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
19660 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
19670 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
19680 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
19690 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
196a0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
196b0 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
196c0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
196d0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
196e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  .};../*.** Retur
196f0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
19700 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
19710 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
19720 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
19730 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
19740 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
19750 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
19760 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
19770 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
19780 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
19790 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
197a0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
197b0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
197c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
197d0 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
197e0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
197f0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
19800 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
19810 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
19820 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
19830 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
19840 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
19850 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
19860 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
19870 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
19880 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
19890 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
198a0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
198b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
198c0 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
198d0 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
198e0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
198f0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
19900 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
19910 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  s..*/.#define OP
19920 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
19930 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65     0x01    /* Se
19940 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
19950 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69  nChange */.#defi
19960 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
19970 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20  WID     0x02    
19980 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
19990 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
199a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
199b0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
199c0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
199d0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
199e0 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
199f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
19a00 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
19a10 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
19a20 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
19a30 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
19a40 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
19a50 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
19a60 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
19a70 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
19a80 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
19a90 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
19aa0 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43      0x20    /* C
19ab0 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c  lear pseudo-tabl
19ac0 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f  e cache in OP_Co
19ad0 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
19ae0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
19af0 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
19b00 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
19b10 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
19b20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19b30 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
19b40 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
19b50 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
19b60 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
19b70 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
19b80 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
19b90 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
19ba0 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
19bb0 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
19bc0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
19bd0 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20  SREG       0x02 
19be0 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
19bf0 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
19c00 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
19c10 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
19c20 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
19c30 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
19c40 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
19c50 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  ation */../*. * 
19c60 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
19c70 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
19c80 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
19c90 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
19ca0 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
19cb0 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20  t Trigger. . *. 
19cc0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
19cd0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
19ce0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
19cf0 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
19d00 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
19d10 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
19d20 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
19d30 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
19d40 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a  represents the .
19d50 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
19d60 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
19d70 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
19d80 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
19d90 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
19da0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
19db0 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
19dc0 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
19dd0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
19de0 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
19df0 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
19e00 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
19e10 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19e20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
19e30 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
19e40 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
19e50 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
19e60 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
19e70 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
19e80 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
19e90 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
19ea0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
19eb0 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
19ec0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
19ed0 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
19ee0 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
19ef0 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
19f00 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
19f10 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
19f20 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
19f30 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
19f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19f50 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
19f60 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
19f80 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
19f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
19fa0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
19fb0 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
19fc0 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
19fd0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
19ff0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1a000 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1a010 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
1a020 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
1a030 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1a040 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
1a050 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
1a060 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1a070 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
1a080 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
1a090 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
1a0a0 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
1a0b0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
1a0c0 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
1a0d0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
1a0e0 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
1a0f0 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a120 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
1a130 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
1a140 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1a150 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
1a160 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1a170 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
1a180 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
1a190 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
1a1a0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1a1b0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
1a1c0 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
1a1d0 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
1a1e0 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
1a1f0 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
1a200 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
1a210 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
1a220 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
1a230 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
1a240 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
1a250 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
1a260 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
1a270 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
1a280 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
1a290 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
1a2a0 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
1a2b0 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a  ne which. .**.**
1a2c0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
1a2d0 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
1a2e0 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
1a2f0 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
1a300 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
1a310 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
1a320 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
1a330 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
1a340 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
1a350 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
1a360 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
1a370 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
1a380 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
1a390 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1a3a0 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
1a3b0 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
1a3c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
1a3d0 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
1a3e0 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
1a3f0 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73  gram. . *. * Ins
1a400 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1a410 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
1a420 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
1a430 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
1a440 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
1a450 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
1a460 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
1a470 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
1a480 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
1a490 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20   . * associated 
1a4a0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
1a4b0 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
1a4c0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
1a4d0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
1a4e0 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
1a4f0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
1a500 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20  r-program.. * . 
1a510 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
1a520 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
1a530 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
1a540 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
1a550 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
1a560 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
1a570 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
1a580 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
1a590 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
1a5a0 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20  ined by the . * 
1a5b0 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
1a5c0 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
1a5d0 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
1a5e0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
1a5f0 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
1a600 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
1a610 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
1a620 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1a630 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1a640 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
1a650 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
1a660 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1a670 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
1a680 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
1a690 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
1a6a0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61  wise NULL.. * ta
1a6b0 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1a6c0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1a6d0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1a6e0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1a6f0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1a700 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1a710 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1a720 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1a730 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1a740 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a750 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1a760 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1a770 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1a780 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1a790 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1a7a0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1a7b0 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1a7c0 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
1a7d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
1a7e0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
1a7f0 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
1a800 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
1a810 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1a820 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
1a830 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1a840 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67  _DELETE). * targ
1a850 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a860 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a870 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a880 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
1a890 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
1a8a0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1a8b0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
1a8c0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
1a8d0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1a8e0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1a8f0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1a900 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
1a910 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
1a920 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
1a930 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
1a940 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
1a950 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
1a960 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20  ate rows of.. * 
1a970 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1a980 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1a990 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1a9a0 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1a9b0 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1a9c0 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1a9d0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1a9e0 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1a9f0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1aa00 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1aa10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1aa20 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1aa30 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1aa40 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1aa50 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1aa60 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1aa70 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1aa80 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a    argument.. * .
1aa90 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1aaa0 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
1aab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aac0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1aad0 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1aae0 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
1aaf0 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
1ab00 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
1ab10 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
1ab20 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
1ab30 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
1ab40 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
1ab50 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
1ab60 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
1ab70 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1ab80 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1ab90 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
1aba0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45  NSERT INTO .. SE
1abb0 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f  LECT ... */.  To
1abc0 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20  ken target;     
1abd0 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
1abe0 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
1abf0 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
1ac00 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1ac10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1ac20 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1ac30 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1ac40 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
1ac50 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
1ac60 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
1ac70 6f 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55  or UPDATE.  VALU
1ac80 45 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e  ES clause for IN
1ac90 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74  SERT */.  IdList
1aca0 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
1acb0 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
1acc0 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
1acd0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
1ace0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
1acf0 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
1ad00 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1ad10 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
1ad20 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
1ad30 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
1ad40 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
1ad50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1ad60 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1ad70 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
1ad80 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
1ad90 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
1ada0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
1adb0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
1adc0 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
1add0 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
1ade0 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
1adf0 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74    .*/.typedef st
1ae00 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
1ae10 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
1ae20 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
1ae30 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
1ae40 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
1ae50 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
1ae60 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
1ae70 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1ae80 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
1ae90 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
1aea0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73  schema */.  cons
1aeb0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1aec0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1aed0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1aee0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1aef0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1af00 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1af10 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1af20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1af30 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1af40 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1af50 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1af60 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1af70 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1af80 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1af90 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1afa0 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1afb0 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1afc0 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1afd0 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1afe0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1aff0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1b000 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1b010 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1b020 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1b030 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1b040 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1b050 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1b060 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1b070 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1b080 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1b090 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1b0a0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1b0b0 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1b0c0 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1b0d0 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1b0e0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1b0f0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1b100 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1b110 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1b120 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1b130 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1b140 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1b150 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1b160 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1b170 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1b180 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1b190 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67  m allowed string
1b1a0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20   length */.  u8 
1b1b0 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20    mallocFailed; 
1b1c0 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75    /* Becomes tru
1b1d0 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20  e if any memory 
1b1e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73  allocation fails
1b1f0 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1b200 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1b210 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1b220 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1b230 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1b240 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b  /.  u8   tooBig;
1b250 20 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f           /* Beco
1b260 6d 65 73 20 74 72 75 65 20 69 66 20 73 74 72 69  mes true if stri
1b270 6e 67 20 73 69 7a 65 20 65 78 63 65 65 64 73 20  ng size exceeds 
1b280 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  limits */.};../*
1b290 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1b2a0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1b2b0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1b2c0 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1b2d0 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1b2e0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1b2f0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1b300 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1b310 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1b320 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1b330 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1b340 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1b350 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1b360 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
1b370 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
1b380 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
1b390 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
1b3a0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1b3b0 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
1b3c0 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
1b3d0 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
1b3e0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
1b3f0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1b400 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1b410 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1b420 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1b430 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1b440 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1b450 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1b460 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1b470 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1b480 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1b490 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1b4a0 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1b4b0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1b4c0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1b4d0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1b500 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1b510 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1b520 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1b530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1b540 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1b550 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1b560 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1b590 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1b5a0 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1b5b0 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1b5c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b5d0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1b5e0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1b5f0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
1b620 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
1b630 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
1b640 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1b670 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1b680 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1b690 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b6a0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1b6b0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1b6c0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1b6d0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1b6f0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1b700 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1b710 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1b720 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1b730 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1b740 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1b750 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1b760 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1b770 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1b780 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1b790 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1b7a0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1b7b0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1b7c0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1b7d0 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1b7e0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1b7f0 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1b820 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1b830 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b850 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1b860 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1b870 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1b880 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1b890 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1b8a0 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1b8b0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
1b8c0 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
1b8d0 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
1b8e0 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
1b8f0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1b900 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
1b910 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1b920 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
1b930 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
1b940 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1b950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
1b960 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
1b970 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1b9a0 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
1b9b0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
1b9c0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1b9d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b9e0 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
1b9f0 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
1ba00 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba20 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
1ba30 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
1ba40 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1ba50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1ba60 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
1ba70 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1ba80 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
1bab0 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
1bac0 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
1bad0 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
1bae0 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
1baf0 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
1bb00 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
1bb10 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
1bb20 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
1bb30 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
1bb40 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
1bb50 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54  nabled */.  /* T
1bb60 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
1bb70 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
1bb80 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
1bb90 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
1bba0 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
1bbb0 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
1bbc0 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
1bbd0 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
1bc00 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
1bc10 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1bc20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
1bc50 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
1bc60 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
1bc70 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1bca0 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
1bcb0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1bcc0 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bce0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1bcf0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1bd00 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
1bd10 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
1bd20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1bd30 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
1bd40 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
1bd50 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1bd60 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
1bd70 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
1bd80 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
1bd90 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
1bda0 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
1bdb0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1bdc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
1bdd0 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
1bde0 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ex */.  void (*x
1bdf0 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
1be00 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
1be10 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
1be20 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
1be30 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1be50 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
1be60 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20   to xLog() */.  
1be70 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
1be80 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
1be90 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
1bea0 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
1beb0 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  lls */.#ifdef SQ
1bec0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c  LITE_ENABLE_SQLL
1bed0 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c  OG.  void(*xSqll
1bee0 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  og)(void*,sqlite
1bef0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1bf00 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53  int);.  void *pS
1bf10 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66  qllogArg;.#endif
1bf20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  .};../*.** Conte
1bf30 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1bf40 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1bf50 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1bf60 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1bf70 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1bf80 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1bf90 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1bfa0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1bfb0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1bfc0 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1bfd0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1bfe0 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1bff0 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1c000 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1c010 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c030 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
1c040 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  .  */.  int walk
1c050 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1c080 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
1c090 38 20 62 53 65 6c 65 63 74 44 65 70 74 68 46 69  8 bSelectDepthFi
1c0a0 72 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  rst;            
1c0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 73           /* Do s
1c0c0 75 62 71 75 65 72 69 65 73 20 66 69 72 73 74 20  ubqueries first 
1c0d0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c100 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1c110 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1c120 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1c130 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1c140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c150 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1c160 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
1c1a0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
1c1b0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
1c1e0 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1c1f0 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
1c200 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
1c210 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
1c220 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
1c230 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
1c240 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1c250 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1c260 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1c270 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1c280 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1c290 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1c2a0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1c2b0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1c2c0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1c2d0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1c2e0 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1c2f0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1c300 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1c310 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1c320 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1c330 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1c340 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1c350 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1c360 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1c370 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1c380 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1c390 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1c3a0 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1c3b0 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1c3c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1c3d0 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1c3e0 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1c3f0 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1c400 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1c410 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1c420 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1c430 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1c440 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1c450 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
1c460 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1c470 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
1c480 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
1c490 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
1c4a0 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
1c4b0 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
1c4c0 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
1c4d0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
1c4e0 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
1c4f0 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1c510 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
1c520 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
1c550 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
1c560 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
1c570 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
1c580 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
1c5c0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
1c5d0 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
1c5e0 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1c5f0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
1c600 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
1c610 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
1c620 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
1c630 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
1c640 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
1c650 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
1c660 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
1c670 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
1c680 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
1c690 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
1c6a0 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
1c6b0 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
1c6c0 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
1c6d0 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
1c6e0 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
1c6f0 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
1c700 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1c710 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1c720 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
1c730 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
1c740 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
1c750 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
1c760 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
1c770 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1c780 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1c790 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
1c7a0 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
1c7b0 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
1c7c0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1c7d0 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
1c7e0 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
1c7f0 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
1c800 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
1c810 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
1c820 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
1c830 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
1c840 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
1c850 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
1c860 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
1c870 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
1c880 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  also all.** the 
1c890 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c8a0 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
1c8b0 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66  e as an alisse f
1c8c0 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
1c8d0 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
1c8e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c8f0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
1c900 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c910 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
1c920 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
1c930 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS3.#endif../*
1c940 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
1c950 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
1c960 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
1c970 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
1c980 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
1c990 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
1c9a0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
1c9b0 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
1c9c0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c9d0 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
1c9e0 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
1c9f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1ca00 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
1ca10 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
1ca20 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
1ca30 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
1ca40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1ca50 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
1ca60 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
1ca70 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1ca80 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
1ca90 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
1caa0 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
1cab0 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
1cac0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
1cad0 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
1cae0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1caf0 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1cb00 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
1cb10 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
1cb20 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
1cb30 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
1cb40 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
1cb50 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
1cb60 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1cb70 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
1cb80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cb90 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
1cba0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1cbb0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1cbc0 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
1cbd0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1cbe0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1cbf0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1cc00 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
1cc10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cc20 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
1cc30 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1cc40 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1cc50 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
1cc60 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1cc70 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1cc80 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1cc90 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
1cca0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ccb0 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
1ccc0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1ccd0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1cce0 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
1ccf0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1cd00 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
1cd10 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
1cd20 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
1cd30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1cd40 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1cd50 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
1cd60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1cd70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1cd80 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
1cd90 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
1cda0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1cdb0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1cdc0 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
1cdd0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1cde0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cdf0 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
1ce00 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
1ce10 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1ce20 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1ce30 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
1ce40 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1ce50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ce60 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
1ce70 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
1ce80 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1ce90 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
1cea0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
1ceb0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1cec0 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (x)).#endif../*.
1ced0 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
1cee0 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
1cef0 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
1cf00 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
1cf10 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
1cf20 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
1cf30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
1cf40 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
1cf50 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
1cf60 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
1cf70 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
1cf80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1cf90 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
1cfa0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1cfb0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  loc(int);.void *
1cfc0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
1cfd0 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  o(int);.void *sq
1cfe0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1cff0 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  o(sqlite3*, int)
1d000 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1d010 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
1d020 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
1d030 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
1d040 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1d050 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
1d060 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
1d070 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1d080 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  ar*, int);.void 
1d090 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
1d0a0 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  void*, int);.voi
1d0b0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1d0c0 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
1d0d0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1d0e0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d0f0 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
1d100 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1d110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1d120 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
1d130 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1d140 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
1d150 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1d160 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
1d170 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
1d180 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
1d190 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
1d1a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
1d1b0 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
1d1c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
1d1d0 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
1d1e0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
1d1f0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1d200 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
1d210 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
1d220 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
1d230 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
1d240 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
1d250 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
1d260 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
1d270 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
1d280 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
1d290 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
1d2a0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
1d2b0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
1d2c0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
1d2d0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
1d2e0 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
1d2f0 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
1d300 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
1d310 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
1d320 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
1d330 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
1d340 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
1d350 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
1d360 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
1d370 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
1d380 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
1d390 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1d3a0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
1d3b0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
1d3c0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1d3d0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
1d3e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1d3f0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1d400 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
1d410 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1d420 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
1d430 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
1d440 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
1d450 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1d460 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
1d470 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1d480 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1d490 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
1d4a0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
1d4b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d4c0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1d4d0 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
1d4e0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
1d4f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1d500 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1d510 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1d520 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
1d530 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1d540 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
1d550 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1d560 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1d570 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
1d580 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1d590 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1d5a0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
1d5b0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1d5c0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1d5d0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
1d5e0 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
1d5f0 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
1d600 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1d610 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1d620 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
1d630 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1d640 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1d650 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1d660 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
1d670 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1d680 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
1d690 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
1d6a0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
1d6b0 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
1d6c0 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
1d6d0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
1d6e0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
1d6f0 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
1d700 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
1d710 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1d720 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
1d730 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
1d740 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1d750 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1d760 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
1d770 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
1d780 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1d790 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
1d7a0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
1d7b0 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
1d7c0 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  cum*, int, const
1d7d0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
1d7e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1d7f0 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64  _OMIT_TRACE.void
1d800 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1d810 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
1d820 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1d830 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74  ndif.char *sqlit
1d840 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
1d850 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1d860 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
1d870 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
1d880 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1d890 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
1d8a0 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
1d8b0 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
1d8c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
1d8d0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
1d8e0 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
1d8f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d900 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
1d910 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
1d920 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1d930 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
1d940 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1d950 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
1d960 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
1d970 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
1d980 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66  dif../* Output f
1d990 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51  ormatting for SQ
1d9a0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58  LITE_TESTCTRL_EX
1d9b0 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66  PLAIN */.#if def
1d9c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1d9d0 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29  LE_TREE_EXPLAIN)
1d9e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d9f0 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65  xplainBegin(Vdbe
1da00 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1da10 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28  e3ExplainPrintf(
1da20 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
1da30 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64  r*, ...);.  void
1da40 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e   sqlite3ExplainN
1da50 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  L(Vdbe*);.  void
1da60 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1da70 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  ush(Vdbe*);.  vo
1da80 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1da90 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76  nPop(Vdbe*);.  v
1daa0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1dab0 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b  inFinish(Vdbe*);
1dac0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1dad0 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62  xplainSelect(Vdb
1dae0 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e*, Select*);.  
1daf0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1db00 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45  ainExpr(Vdbe*, E
1db10 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
1db20 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1db30 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72  List(Vdbe*, Expr
1db40 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20  List*);.  const 
1db50 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62  char *sqlite3Vdb
1db60 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62  eExplanation(Vdb
1db70 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
1db80 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1db90 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  inBegin(X).# def
1dba0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1dbb0 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20  inSelect(A,B).# 
1dbc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1dbd0 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23  plainExpr(A,B).#
1dbe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1dbf0 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41  xplainExprList(A
1dc00 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1dc10 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1dc20 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  h(X).# define sq
1dc30 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61  lite3VdbeExplana
1dc40 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  tion(X) 0.#endif
1dc50 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
1dc60 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
1dc70 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
1dc80 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
1dc90 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
1dca0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
1dcb0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
1dcc0 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
1dcd0 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  e(char*);.int sq
1dce0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
1dcf0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1dd00 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
1dd10 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
1dd20 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
1dd30 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
1dd40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
1dd50 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
1dd60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1dd70 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
1dd80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1dd90 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
1dda0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
1ddb0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
1ddc0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
1ddd0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1dde0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
1ddf0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
1de00 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
1de10 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
1de20 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1de30 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
1de40 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
1de50 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
1de60 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
1de70 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1de80 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1de90 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
1dea0 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
1deb0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
1dec0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1ded0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
1dee0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
1def0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
1df00 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1df10 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
1df20 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
1df30 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
1df40 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
1df50 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
1df60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1df70 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
1df80 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
1df90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1dfa0 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
1dfb0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
1dfc0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
1dfd0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
1dfe0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
1dff0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e000 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
1e010 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1e020 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1e030 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1e040 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
1e050 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1e060 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1e070 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
1e080 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1e090 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1e0a0 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
1e0b0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
1e0c0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1e0d0 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
1e0e0 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
1e0f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
1e100 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
1e110 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1e120 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e130 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
1e140 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
1e150 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1e160 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
1e170 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
1e180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e190 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
1e1a0 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
1e1b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1e1c0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
1e1d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e1e0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
1e1f0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
1e200 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
1e210 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
1e220 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
1e230 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1e240 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
1e250 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  rse *, int);.voi
1e260 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
1e270 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1e280 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1e290 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1e2a0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1e2b0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1e2c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1e2d0 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
1e2e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e2f0 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
1e300 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1e310 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1e330 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
1e340 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
1e350 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1e360 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
1e370 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1e380 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
1e390 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
1e3a0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1e3b0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
1e3c0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
1e3d0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1e3e0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
1e3f0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1e400 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1e410 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1e420 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1e430 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1e440 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1e450 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1e460 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1e470 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
1e480 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1e490 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
1e4a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1e4b0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
1e4c0 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65  Parse *);..Bitve
1e4d0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
1e4e0 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
1e4f0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
1e500 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
1e510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1e520 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
1e530 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
1e540 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
1e550 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
1e560 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e570 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
1e580 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
1e590 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
1e5a0 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
1e5b0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
1e5c0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
1e5d0 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
1e5e0 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
1e5f0 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
1e600 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
1e610 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
1e620 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
1e630 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
1e640 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
1e650 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1e660 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
1e670 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69  t*, u8 iBatch, i
1e680 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1e690 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
1e6a0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
1e6b0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
1e6c0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
1e6d0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1e6e0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
1e6f0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1e700 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1e710 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
1e720 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1e730 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
1e740 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1e750 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
1e760 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
1e770 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
1e780 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1e790 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
1e7a0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1e7b0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1e7c0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1e7d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e7e0 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
1e7f0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e800 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e810 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
1e820 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
1e830 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1e840 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1e850 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
1e860 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1e870 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
1e880 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
1e890 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1e8a0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
1e8b0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1e8c0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1e8d0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
1e8e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1e8f0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1e900 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  (X).#endif.int s
1e910 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74  qlite3CodeCorout
1e920 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ine(Parse*, Sele
1e930 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1e950 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
1e960 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
1e970 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
1e980 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
1e990 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
1e9a0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
1e9b0 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
1e9c0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1e9d0 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1e9e0 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1e9f0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1ea00 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1ea10 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1ea20 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1ea30 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1ea40 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1ea50 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1ea60 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1ea70 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1ea80 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1ea90 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1eaa0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1eab0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1eac0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1ead0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1eae0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1eaf0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1eb20 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1eb30 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1eb40 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1eb50 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1eb60 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1eb70 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1eb80 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1eb90 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1eba0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1ebb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1ebc0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1ebd0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1ebe0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1ebf0 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1ec00 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1ec10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1ec20 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1ec30 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1ec40 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1ec50 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1ec60 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1ec70 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
1ec80 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
1ec90 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
1eca0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1ecb0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c      Token*, int,
1ece0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ecf0 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
1ed00 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1ed10 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1ed20 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
1ed30 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1ed40 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
1ed50 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
1ed60 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1ed70 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1ed80 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
1edb0 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
1edc0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1edd0 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
1ede0 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
1edf0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1ee00 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
1ee10 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1ee20 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
1ee30 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
1ee40 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
1ee50 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
1ee60 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
1ee70 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
1ee80 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
1ee90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1eea0 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
1eeb0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
1eec0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1eed0 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
1eee0 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
1eef0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
1ef00 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
1ef10 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
1ef20 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
1ef30 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1ef40 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
1ef50 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
1ef60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
1ef70 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
1ef80 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
1ef90 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
1efa0 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
1efb0 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
1efc0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
1efd0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
1efe0 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
1eff0 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
1f000 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
1f010 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f020 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
1f030 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1f040 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
1f050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f060 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
1f070 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
1f080 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f090 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f0a0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
1f0b0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1f0c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f0d0 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
1f0e0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1f0f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f100 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1f110 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
1f120 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1f130 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e  hePop(Parse*, in
1f140 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f150 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
1f160 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1f180 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
1f190 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f1a0 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
1f1b0 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
1f1c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1f1d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1f1e0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1f1f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1f200 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
1f210 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1f220 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f230 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
1f240 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1f250 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1f260 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
1f270 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1f280 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f290 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e  3ExprCodeConstan
1f2a0 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ts(Parse*, Expr*
1f2b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f2c0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
1f2d0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1f2e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1f2f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
1f300 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
1f310 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1f320 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
1f330 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
1f340 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1f350 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
1f360 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
1f370 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
1f380 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
1f390 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
1f3a0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74  Table(Parse*,int
1f3b0 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68   isView,const ch
1f3c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1f3d0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1f3e0 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
1f3f0 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
1f400 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  ew,struct SrcLis
1f410 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
1f420 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
1f430 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
1f440 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1f450 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1f460 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1f470 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1f480 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1f490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1f4a0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
1f4b0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
1f4c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1f4d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
1f4e0 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
1f4f0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
1f500 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
1f510 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1f520 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
1f530 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
1f540 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f550 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
1f560 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f570 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
1f580 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
1f590 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
1f5a0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
1f5b0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
1f5c0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
1f5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f5e0 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
1f5f0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
1f600 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1f610 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
1f620 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
1f630 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
1f640 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
1f650 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1f660 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
1f670 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1f680 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
1f690 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
1f6a0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
1f6b0 65 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  etState(void);.v
1f6c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
1f6d0 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c  ackAll(sqlite3*,
1f6e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f6f0 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
1f700 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ma(Parse*, int);
1f710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1f720 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65  eVerifyNamedSche
1f730 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ma(Parse*, const
1f740 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69   char *zDb);.voi
1f750 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72  d sqlite3BeginTr
1f760 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1f770 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1f780 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61  ite3CommitTransa
1f790 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
1f7a0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
1f7b0 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ackTransaction(P
1f7c0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1f7d0 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61  ite3Savepoint(Pa
1f7e0 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  rse*, int, Token
1f7f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f800 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
1f810 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64  sqlite3 *);.void
1f820 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74   sqlite3LeaveMut
1f830 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65  exAndCloseZombie
1f840 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
1f850 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
1f860 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e  stant(Expr*);.in
1f870 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
1f880 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45  onstantNotJoin(E
1f890 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f8a0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1f8b0 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a  OrFunction(Expr*
1f8c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f8d0 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
1f8e0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
1f8f0 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
1f900 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
1f910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f920 72 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28  rCodeIsNullJump(
1f930 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70  Vdbe*, const Exp
1f940 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  r*, int, int);.i
1f950 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65  nt sqlite3ExprNe
1f960 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61  edsNoAffinityCha
1f970 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c  nge(const Expr*,
1f980 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69   char);.int sqli
1f990 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74  te3IsRowid(const
1f9a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1f9b0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
1f9c0 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1f9d0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
1f9e0 20 69 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c   int, Trigger *,
1f9f0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1fa00 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
1fa10 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
1fa20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1fa30 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1fa40 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
1fa50 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  y(Parse*, Index*
1fa60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1fa70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1fa80 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
1fa90 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
1faa0 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20  ble*,int,int,.  
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c     int*,int,int,
1fae0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76  int,int,int*);.v
1faf0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
1fb00 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
1fb10 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1fb20 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
1fb30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
1fb40 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
1fb50 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
1fb60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1fb70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1fb80 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
1fb90 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
1fba0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1fbb0 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
1fbc0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1fbd0 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
1fbe0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1fbf0 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
1fc00 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
1fc10 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29  int, char*, int)
1fc20 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1fc30 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
1fc40 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
1fc50 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
1fc60 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
1fc70 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
1fc80 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1fc90 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
1fca0 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
1fcb0 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
1fcc0 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
1fcd0 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
1fce0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
1fcf0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
1fd00 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
1fd10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
1fd20 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
1fd30 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
1fd40 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
1fd50 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
1fd60 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1fd70 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
1fd80 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
1fd90 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
1fda0 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
1fdb0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1fdc0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
1fdd0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
1fde0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1fdf0 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e  egisterGlobalFun
1fe00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
1fe10 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
1fe20 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
1fe30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
1fe40 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
1fe50 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1fe60 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
1fe70 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
1fe80 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
1fe90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
1fea0 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
1feb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
1fec0 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
1fed0 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
1fee0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1fef0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
1ff00 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
1ff10 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1ff20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
1ff30 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
1ff40 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
1ff50 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
1ff60 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff80 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
1ff90 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
1ffa0 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
1ffb0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
1ffc0 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
1ffd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1ffe0 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
1fff0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
20000 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
20010 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
20020 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
20030 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
20040 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
20050 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
20060 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
20070 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
20080 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
20090 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
200a0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
200b0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
200c0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
200d0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
200e0 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
200f0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
20100 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
20120 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
20130 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
20140 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
20150 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
20160 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
20170 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
20180 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
20190 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
201a0 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
201b0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
201c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
201d0 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
201e0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
201f0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
20200 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
20210 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
20220 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
20230 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
20240 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
20250 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
20260 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
20270 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
202a0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
202b0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
202c0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
202d0 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
202e0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
202f0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
20300 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
20310 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
20320 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
20330 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
20340 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
20350 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
20360 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
20370 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
20380 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
20390 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
203a0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
203b0 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
203c0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
203d0 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
203e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
203f0 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
20400 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20410 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
20420 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
20430 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
20440 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a  el : (p)).#else.
20450 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20460 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
20470 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
20480 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
20490 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
204a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
204b0 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
204c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
204d0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
204e0 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
204f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20500 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
20510 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
20520 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20530 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
20540 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
20550 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
20560 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
20570 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
20580 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
20590 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
205a0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
205b0 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
205c0 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
205d0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
205e0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
205f0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
20600 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
20610 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
20620 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
20630 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
20640 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
20650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
20660 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
20670 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
20680 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
20690 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
206a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
206b0 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
206c0 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
206d0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
206e0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
206f0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
20700 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
20710 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
20720 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
20730 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
20740 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
20750 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
20760 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
20770 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
20780 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
20790 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
207a0 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
207b0 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
207c0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
207d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
207e0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
207f0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
20800 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
20810 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
20820 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
20830 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
20840 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
20850 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20860 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
20870 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
20880 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
20890 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
208a0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
208b0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
208c0 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
208d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
208e0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
208f0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
20900 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
20910 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
20920 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
20930 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
20940 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
20950 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
20960 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
20970 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20980 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
20990 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
209a0 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
209b0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
209c0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
209d0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
209e0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
209f0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
20a00 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
20a10 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
20a20 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
20a30 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
20a40 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
20a50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20a60 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
20a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
20a80 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
20a90 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
20aa0 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
20ab0 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
20ac0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
20ad0 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
20ae0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
20af0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
20b00 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
20b10 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
20b20 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
20b30 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
20b40 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
20b50 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
20b60 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
20b70 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
20b80 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
20b90 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f  l.c.** file.  Co
20ba0 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68  de should use th
20bb0 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65  e MACRO forms be
20bc0 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72 69  low, as the Vari
20bd0 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a  nt32 versions.**
20be0 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73   are coded to as
20bf0 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20  sume the single 
20c00 62 79 74 65 20 63 61 73 65 20 69 73 20 61 6c 72  byte case is alr
20c10 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68  eady handled (wh
20c20 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52  ich .** the MACR
20c30 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f  O form does)..*/
20c40 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
20c50 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
20c60 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20  har*, u64);.int 
20c70 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
20c80 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  32(unsigned char
20c90 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69  *, u32);.u8 sqli
20ca0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
20cb0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
20cc0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
20cd0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
20ce0 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
20cf0 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
20d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
20d10 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
20d20 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20  *.** The header 
20d30 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73  of a record cons
20d40 69 73 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e  ists of a sequen
20d50 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  ce variable-leng
20d60 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  th integers..** 
20d70 54 68 65 73 65 20 69 6e 74 65 67 65 72 73 20 61  These integers a
20d80 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73  re almost always
20d90 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65   small and are e
20da0 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67  ncoded as a sing
20db0 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20  le byte..** The 
20dc0 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
20dd0 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20   take advantage 
20de0 74 68 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f  this fact to pro
20df0 76 69 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f  vide a fast enco
20e00 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65  de.** and decode
20e10 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 73   of the integers
20e20 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61   in a record hea
20e30 64 65 72 2e 20 20 49 74 20 69 73 20 66 61 73 74  der.  It is fast
20e40 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f  er for the commo
20e50 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20  n.** case where 
20e60 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 61  the integer is a
20e70 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49   single byte.  I
20e80 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c  t is a little sl
20e90 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a  ower when the.**
20ea0 20 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20   integer is two 
20eb0 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20  or more bytes.  
20ec0 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69  But overall it i
20ed0 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  s faster..**.** 
20ee0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78  The following ex
20ef0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71  pressions are eq
20f00 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20  uivalent:.**.** 
20f10 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47      x = sqlite3G
20f20 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26  etVarint32( A, &
20f30 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
20f40 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
20f50 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
20f60 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56 61 72  *     x = getVar
20f70 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a  int32( A, B );.*
20f80 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56 61 72  *     x = putVar
20f90 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a  int32( A, B );.*
20fa0 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  *.*/.#define get
20fb0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
20fc0 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
20fd0 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
20fe0 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
20ff0 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
21000 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
21010 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
21020 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
21030 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
21040 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
21050 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
21060 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
21070 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42  tVarint32((A),(B
21080 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
21090 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
210a0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
210b0 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
210c0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
210d0 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
210e0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
210f0 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e  tyStr(Vdbe *, In
21100 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dex *);.void sql
21110 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
21120 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62  yStr(Vdbe *, Tab
21130 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  le *);.char sqli
21140 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
21150 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
21160 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
21170 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
21180 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
21190 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
211a0 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
211b0 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
211c0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
211d0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
211e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
211f0 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  4*, int, u8);.vo
21200 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
21210 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
21220 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
21230 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
21240 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
21250 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
21260 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
21270 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
21280 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
21290 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
212a0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
212b0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
212c0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
212d0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
212e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
212f0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
21300 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
21310 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
21320 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
21330 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
21340 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
21350 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
21360 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
21370 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
21380 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
21390 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
213a0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
213b0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
213c0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
213d0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
213e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
213f0 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45  xpr*, Token*);.E
21400 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21410 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
21420 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
21430 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
21440 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
21450 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
21460 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
21470 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
21480 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
21490 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
214a0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
214b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
214c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
214d0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
214e0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
214f0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
21500 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
21510 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
21520 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
21530 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
21540 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
21550 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
21560 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
21570 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
21580 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
21590 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
215a0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
215b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
215c0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
215d0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
215e0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
215f0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
21600 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
21610 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
21620 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
21630 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
21640 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
21650 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
21660 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
21670 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
21680 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
21690 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
216a0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
216b0 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
216c0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
216d0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
216e0 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
216f0 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
21700 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
21710 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
21720 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
21730 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
21740 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
21750 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
21760 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
21770 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  3.char *sqlite3U
21780 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20  tf8to16(sqlite3 
21790 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69  *, u8, char *, i
217a0 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64  nt, int *);.#end
217b0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
217c0 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
217d0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
217e0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
217f0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
21800 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
21810 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
21820 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
21830 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
21840 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
21850 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
21860 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
21870 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
21880 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
21890 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
218a0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
218b0 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
218c0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
218d0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
218e0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
218f0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
21900 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
21910 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
21920 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
21930 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
21940 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
21950 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
21960 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
21970 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
21980 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
21990 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
219a0 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
219b0 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
219c0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
219d0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
219e0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
219f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
21a00 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
21a10 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
21a20 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
21a30 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
21a40 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
21a50 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
21a60 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
21a70 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
21a80 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
21a90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
21aa0 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
21ab0 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
21ac0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
21ad0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
21ae0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
21af0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
21b00 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
21b10 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
21b20 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
21b30 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
21b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
21b50 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
21b60 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
21b70 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
21b80 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
21b90 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
21ba0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
21bb0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21bc0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
21bd0 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
21be0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
21bf0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
21c00 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
21c10 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
21c20 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
21c30 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
21c40 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
21c50 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
21c60 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
21c70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21c80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
21c90 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
21ca0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
21cb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21cc0 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
21cd0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
21ce0 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
21cf0 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
21d00 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
21d10 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
21d20 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
21d30 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
21d40 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
21d50 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
21d60 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
21d70 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
21d80 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
21d90 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
21da0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
21db0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
21dc0 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
21dd0 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
21de0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
21df0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
21e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
21e10 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
21e20 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
21e30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
21e40 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
21e50 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
21e60 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21e70 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
21e80 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
21e90 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
21ea0 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
21eb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21ec0 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
21ed0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
21ee0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21ef0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
21f00 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
21f10 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
21f20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
21f30 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
21f40 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
21f50 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
21f60 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
21f70 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
21f80 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
21f90 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
21fa0 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
21fb0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
21fc0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
21fd0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  nfo *sqlite3Inde
21fe0 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a  xKeyinfo(Parse *
21ff0 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20  , Index *);.int 
22000 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
22010 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
22020 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
22030 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
22040 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
22050 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
22060 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
22070 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
22080 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
22090 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
220a0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
220b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
220c0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
220d0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
220e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
220f0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
22100 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22110 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
22120 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
22130 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
22140 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
22150 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
22160 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22170 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
22180 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
22190 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
221a0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70 61  sqlite3AppendSpa
221b0 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ce(StrAccum*,int
221c0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
221d0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
221e0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
221f0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
22200 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
22210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
22220 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
22230 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
22240 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
22250 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
22260 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
22270 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
22280 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
22290 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
222a0 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
222b0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
222c0 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
222d0 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
222e0 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a  const u8 *);../*
222f0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
22300 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
22310 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
22320 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
22330 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
22340 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76  *(*)(size_t));.v
22350 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
22360 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
22370 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
22380 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
22390 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
223a0 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
223b0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
223c0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
223d0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
223e0 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
223f0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
22400 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
22410 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
22420 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22430 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
22440 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
22450 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
22460 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
22470 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22480 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
22490 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
224a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
224b0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
224c0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
224d0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
224e0 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
224f0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
22500 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22510 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
22520 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
22530 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22540 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
22550 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
22560 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
22570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
22580 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22590 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
225a0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
225b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
225c0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
225d0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
225e0 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
225f0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
22600 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
22610 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
22620 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
22630 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
22640 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
22650 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
22660 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
22670 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
22680 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
22690 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
226a0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
226b0 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
226c0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
226d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
226e0 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
226f0 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
22700 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
22710 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
22720 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
22730 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
22740 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
22750 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
22760 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
22770 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
22780 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  te3 *db, char **
22790 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
227a0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
227b0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
227c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
227d0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
227e0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
227f0 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
22800 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
22810 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
22820 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
22830 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
22840 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
22850 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
22860 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
22870 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
22880 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  int);.   VTable 
22890 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
228a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
228b0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
228c0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
228d0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
228e0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
228f0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
22900 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
22910 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
22920 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
22930 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
22940 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
22950 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
22960 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
22970 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22980 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
22990 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
229a0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
229b0 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
229c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
229d0 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
229e0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
229f0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
22a00 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
22a10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22a20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
22a30 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
22a40 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
22a50 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
22a60 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
22a70 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
22a80 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
22a90 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
22aa0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
22ab0 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
22ac0 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
22ad0 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
22ae0 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
22af0 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
22b00 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22b10 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
22b20 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
22b30 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
22b40 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lue**);.int sqli
22b50 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
22b60 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
22b70 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
22b80 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
22b90 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
22ba0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
22bb0 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74  te3_stmt *);.int
22bc0 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
22bd0 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
22be0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
22bf0 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
22c00 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
22c10 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
22c20 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
22c30 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
22c40 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
22c50 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
22c60 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
22c70 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
22c80 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
22c90 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
22ca0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
22cb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22cc0 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
22cd0 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
22ce0 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
22cf0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
22d00 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
22d10 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
22d20 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22d30 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
22d40 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
22d50 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
22d60 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
22d70 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
22d80 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
22d90 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
22da0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
22db0 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
22dc0 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
22dd0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
22de0 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
22df0 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
22e00 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
22e10 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
22e20 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
22e30 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
22e40 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
22e50 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
22e60 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
22e70 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
22e80 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
22e90 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
22ea0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
22eb0 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
22ec0 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
22ed0 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
22ee0 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
22ef0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
22f00 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
22f10 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
22f20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
22f30 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
22f40 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
22f50 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
22f60 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
22f70 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
22f80 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22f90 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
22fa0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
22fb0 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
22fc0 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
22fd0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
22fe0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
22ff0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23000 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
23010 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
23020 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
23030 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
23040 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
23050 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
23060 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
23070 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
23080 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23090 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
230a0 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
230b0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
230c0 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
230d0 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
230e0 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20  sk(a,b)      0. 
230f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
23100 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
23110 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ,d) 0.#endif.#if
23120 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23130 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
23140 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
23150 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
23160 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71  able*);.  int sq
23170 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
23180 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ex(Parse*,Table*
23190 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69  ,FKey*,Index**,i
231a0 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt**);.#else.  #
231b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
231c0 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64  Delete(a,b).  #d
231d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c  efine sqlite3FkL
231e0 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63  ocateIndex(a,b,c
231f0 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ,d,e).#endif.../
23200 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66  *.** Available f
23210 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20  ault injectors. 
23220 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65   Should be numbe
23230 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
23240 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  th 0..*/.#define
23250 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
23260 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20  ECTOR_MALLOC    
23270 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54   0.#define SQLIT
23280 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
23290 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a  COUNT      1../*
232a0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
232b0 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e  e to the code in
232c0 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f   fault.c used fo
232d0 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62  r identifying "b
232e0 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63  enign".** malloc
232f0 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20   failures. This 
23300 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20  is only present 
23310 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  if SQLITE_OMIT_B
23320 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69  UILTIN_TEST.** i
23330 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
23340 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
23350 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
23360 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ST.  void sqlite
23370 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
23380 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
23390 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
233a0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
233b0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
233c0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
233d0 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
233e0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
233f0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
23400 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f  dif..#define IN_
23410 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
23420 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
23430 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
23440 20 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69           2.#defi
23450 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
23460 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a 23 64  X_ASC       3.#d
23470 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
23480 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20 20 34  NDEX_DESC      4
23490 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
234a0 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
234b0 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   Expr *, int*);.
234c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
234d0 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
234e0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
234f0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
23500 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
23510 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
23520 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
23530 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
23540 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
23550 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
23560 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
23570 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
23580 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
23590 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
235a0 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
235b0 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
235c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
235d0 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
235e0 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
235f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23600 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
23610 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
23620 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
23630 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
23640 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
23650 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
23660 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
23670 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
23680 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
23690 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  *);..#if SQLITE_
236a0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
236b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
236c0 78 70 72 53 65 74 48 65 69 67 68 74 28 50 61 72  xprSetHeight(Par
236d0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
236e0 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69   *p);.  int sqli
236f0 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
23700 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
23710 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
23720 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
23730 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
23740 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23750 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 78  3ExprSetHeight(x
23760 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
23770 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
23780 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
23790 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
237a0 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
237b0 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
237c0 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
237d0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
237e0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
237f0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
23800 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
23810 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
23820 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
23830 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
23840 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
23850 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
23860 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
23870 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
23880 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
23890 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
238a0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
238b0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
238c0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
238d0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
238e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
238f0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
23900 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
23910 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23920 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
23930 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
23940 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
23950 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
23960 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
23970 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
23980 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
23990 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
239a0 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
239b0 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
239c0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
239d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
239e0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
239f0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
23a00 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
23a10 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
23a20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
23a30 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
23a40 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
23a50 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
23a60 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
23a70 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
23a80 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
23a90 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
23aa0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
23ab0 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  d (*sqlite3IoTra
23ac0 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
23ad0 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
23ae0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
23af0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23b00 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
23b10 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
23b20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
23b30 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
23b40 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
23b50 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
23b60 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
23b70 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
23b80 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
23b90 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
23ba0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
23bb0 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
23bc0 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
23bd0 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
23be0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
23bf0 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
23c00 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
23c10 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
23c20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
23c30 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
23c40 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
23c50 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
23c60 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
23c70 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
23c80 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
23c90 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
23ca0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
23cb0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
23cc0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
23cd0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
23ce0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
23cf0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
23d00 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23d10 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
23d20 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23d30 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
23d40 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
23d50 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23d60 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
23d70 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
23d80 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
23d90 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
23da0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
23db0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
23dc0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
23dd0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
23de0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
23df0 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
23e00 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
23e10 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
23e20 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
23e30 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
23e40 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
23e50 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
23e60 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
23e70 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
23e80 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
23e90 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
23ea0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
23eb0 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
23ec0 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
23ed0 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
23ee0 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
23ef0 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
23f00 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
23f10 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
23f20 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
23f30 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
23f40 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
23f50 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
23f60 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
23f70 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
23f80 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
23f90 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
23fa0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
23fb0 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
23fc0 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
23fd0 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
23fe0 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
23ff0 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
24000 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
24010 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  t. .**.** All of
24020 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
24030 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
24040 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
24050 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
24060 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
24070 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
24080 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
24090 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
240a0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
240b0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
240c0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
240d0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
240e0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
240f0 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
24100 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
24110 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
24120 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
24130 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24140 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
24150 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
24160 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
24170 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
24180 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
24190 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
241a0 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
241b0 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
241c0 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
241d0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
241e0 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
241f0 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
24200 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
24210 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69  IDE  0x02  /* Mi
24220 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
24230 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a  okaside memory *
24240 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
24250 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
24260 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
24270 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
24280 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
24290 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
242a0 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
242b0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
242c0 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20  ne MEMTYPE_DB   
242d0 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55        0x10  /* U
242e0 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  ses sqlite3DbMal
242f0 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f  loc, not sqlite_
24300 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69  malloc */..#endi
24310 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
24320 48 5f 20 2a 2f 0a                                H_ */.