/ Hex Artifact Content
Login

Artifact abae976c5cfc00333bd612fc1d31d64056ea1e63:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
16e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
16f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
1700: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
1710: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
1720: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
1730: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1740: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1760: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1770: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1780: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1790: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
17b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
17c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
17d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
17e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
17f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
1800: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
1810: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
1820: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
1830: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
1840: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
1850: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
1860: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
1870: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
1880: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1890: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
18a0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
18b0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
18c0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
18d0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
18e0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18f0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1900: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
1910: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1920: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
1930: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
1940: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1950: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1960: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
1970: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
1980: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1990: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
19a0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
19b0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
19c0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
19d0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
19e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
19f0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
1a00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
1a10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
1a20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1a30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
1a40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
1a50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
1a60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
1a70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
1a80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
1a90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
1aa0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
1ab0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
1ac0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
1ad0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
1ae0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1af0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1b00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1b10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1b20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
1b30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1b40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
1b50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1b60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1b70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1b80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1b90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ba0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1bb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1bc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1bd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1be0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1bf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1c00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1c10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1c20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1c30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1c40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
1c50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
1c60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
1c70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1c80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
1c90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
1ca0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
1cb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
1cc0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
1cd0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
1ce0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
1cf0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
1d00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
1d10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
1d20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
1d30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
1d40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
1d50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
1d60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
1d70: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47  .# define NDEBUG
1d80: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   1.#endif.#if de
1d90: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1da0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1db0: 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e  DEBUG).# undef N
1dc0: 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a  DEBUG.#endif../*
1dd0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
1de0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1df0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
1e00: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
1e10: 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76  en .** doing cov
1e20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74  erage testing, t
1e30: 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73  he condition ins
1e40: 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ide the argument
1e50: 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28   to.** testcase(
1e60: 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61  ) must be evalua
1e70: 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e  ted both true an
1e80: 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72  d false in order
1e90: 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20   to.** get full 
1ea0: 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e  branch coverage.
1eb0: 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29    The testcase()
1ec0: 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74   macro is insert
1ed0: 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e  ed.** to help en
1ee0: 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65  sure adequate te
1ef0: 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70  st coverage in p
1f00: 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70  laces where simp
1f10: 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f  le.** condition/
1f20: 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67  decision coverag
1f30: 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e  e is inadequate.
1f40: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
1f50: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1f60: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
1f70: 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76   sure boundary v
1f80: 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64  alues are tested
1f90: 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73  .  For.** bitmas
1fa0: 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73  k tests, testcas
1fb0: 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20  e() can be used 
1fc0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63  to make sure eac
1fd0: 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e  h bit.** is sign
1fe0: 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64  ificant and used
1ff0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20   at least once. 
2000: 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65   On switch state
2010: 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d  ments.** where m
2020: 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f  ultiple cases go
2030: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f   to the same blo
2040: 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74  ck of code, test
2050: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e  case().** can in
2060: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61  sure that all ca
2070: 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ses are evaluate
2080: 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20  d..**.*/.#ifdef 
2090: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
20a0: 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
20b0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29  te3Coverage(int)
20c0: 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  ;.# define testc
20d0: 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b  ase(X)  if( X ){
20e0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20f0: 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65  (__LINE__); }.#e
2100: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73  lse.# define tes
2110: 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a  tcase(X).#endif.
2120: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f  ./*.** The TESTO
2130: 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65  NLY macro is use
2140: 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72  d to enclose var
2150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
2160: 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62  ns or.** other b
2170: 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74  its of code that
2180: 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73   are needed to s
2190: 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d  upport the argum
21a0: 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  ents.** within t
21b0: 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73  estcase() and as
21c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a  sert() macros..*
21d0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
21e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f0: 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  d(SQLITE_COVERAG
2200: 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  E_TEST).# define
2210: 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a   TESTONLY(X)  X.
2220: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54  #else.# define T
2230: 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  ESTONLY(X).#endi
2240: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d  f../*.** Sometim
2250: 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61  es we need a sma
2260: 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64  ll amount of cod
2270: 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69  e such as a vari
2280: 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  able initializat
2290: 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20  ion.** to setup 
22a0: 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65  for a later asse
22b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20  rt() statement. 
22c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
22d0: 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20  this code to.** 
22e0: 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65  appear when asse
22f0: 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64  rt() is disabled
2300: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2310: 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66   macro is theref
2320: 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  ore.** used to c
2330: 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75  ontain that setu
2340: 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56  p code.  The "VV
2350: 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64  A" acronym stand
2360: 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69  s for.** "Verifi
2370: 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
2380: 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74  on, and Accredit
2390: 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65  ation".  In othe
23a0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20  r words, the.** 
23b0: 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f  code within VVA_
23c0: 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79  ONLY() will only
23d0: 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69   run during veri
23e0: 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  fication process
23f0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e  es..*/.#ifndef N
2400: 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56  DEBUG.# define V
2410: 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  VA_ONLY(X)  X.#e
2420: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41  lse.# define VVA
2430: 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  _ONLY(X).#endif.
2440: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59  ./*.** The ALWAY
2450: 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72  S and NEVER macr
2460: 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c  os surround bool
2470: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ean expressions 
2480: 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e  which .** are in
2490: 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73  tended to always
24a0: 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73   be true or fals
24b0: 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
24c0: 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73    Such.** expres
24d0: 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f  sions could be o
24e0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
24f0: 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e  code completely.
2500: 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72    But they.** ar
2510: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20  e included in a 
2520: 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64  few cases in ord
2530: 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68  er to enhance th
2540: 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20  e resilience.** 
2550: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65  of SQLite to une
2560: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
2570: 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63   - to make the c
2580: 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e  ode "self-healin
2590: 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c  g".** or "ductil
25a0: 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  e" rather than b
25b0: 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61  eing "brittle" a
25c0: 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74  nd crashing at t
25d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74  he first.** hint
25e0: 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65   of unplanned be
25f0: 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e  havior..**.** In
2600: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c   other words, AL
2610: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2620: 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66  re added for def
2630: 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a  ensive code..**.
2640: 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f  ** When doing co
2650: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41  verage testing A
2660: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
2670: 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74  are hard-coded t
2680: 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64  o.** be true and
2690: 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74   false so that t
26a0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  he unreachable c
26b0: 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79  ode they specify
26c0: 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20   will.** not be 
26d0: 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73  counted as untes
26e0: 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ted code..*/.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2710: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2720: 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66  )      (1).# def
2730: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2740: 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65     (0).#elif !de
2750: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
2760: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2770: 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73        ((X)?1:(as
2780: 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65  sert(0),0)).# de
2790: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27a0: 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74      ((X)?(assert
27b0: 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a  (0),1):0).#else.
27c0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
27d0: 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65  X)      (X).# de
27e0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27f0: 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a      (X).#endif..
2800: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2810: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
2820: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69  the input is a i
2830: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
2840: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
2850: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
2860: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
2870: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
2880: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
2890: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
28a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
28b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
28c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
28d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
28e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
28f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
2900: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
2910: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
2920: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
2930: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
2940: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
2950: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
2960: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
2970: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
2980: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
2990: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
29b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
29c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
29d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
29e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
29f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
2a00: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
2a10: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
2a20: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
2a30: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
2a40: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
2a50: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
2a60: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
2a70: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
2a80: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
2a90: 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ".#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3c00: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
3c10: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
3c20: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
3c30: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
3c40: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
3c50: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
3c60: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
3c70: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
3c80: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
3c90: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
3ca0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3cb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
3cc0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
3cd0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
3ce0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
3cf0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
3d20: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
3d30: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
3d40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3d50: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
3d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
3d70: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
3d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
3d90: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
3da0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
3db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3dc0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
3dd0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3de0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
3df0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
3e00: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
3e10: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
3e20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3e30: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
3e40: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
3e50: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
3e60: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
3e70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
3e80: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
3e90: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
3ea0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
3eb0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3ec0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
3ed0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
3ee0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
3ef0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
3f00: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
3f10: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
3f20: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
3f30: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
3f40: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
3f50: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
3f60: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
3f70: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
3f80: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
3f90: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
3fa0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
3fb0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
3fc0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
3fd0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
3fe0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
3ff0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4000: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4010: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4020: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4030: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4040: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4050: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4070: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4080: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4090: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
40a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
40b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
40c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
40d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
40e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
40f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4100: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4110: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4120: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4130: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4140: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4150: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4160: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4170: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4180: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4190: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
41a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
41b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
41c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
41d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
41e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
41f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4200: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4210: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4220: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4230: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4240: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4250: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4260: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4270: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4280: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4290: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
42a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
42b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
42c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
42d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
42e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
42f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4300: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4310: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4320: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4330: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4340: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4350: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4360: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4370: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4380: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4390: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
43a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
43b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
43c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
43d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
43e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
43f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4400: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4410: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4420: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4430: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4440: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4460: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4470: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4480: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4490: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
44a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
44b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
44c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
44d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
44e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
44f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4500: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4510: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4520: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4530: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4540: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4550: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4560: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4570: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4580: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
45a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
45b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
45c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
45d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
45e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
45f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4690: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
46a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
46b0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
46c0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
46f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4710: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4720: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4730: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4740: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4750: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4760: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4770: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
4780: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
4790: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
47a0: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
47b0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
47c0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
47d0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
47e0: 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a  e handle. .**.**
47f0: 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79   The sqlite.busy
4800: 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f  Handler member o
4810: 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72  f the sqlite str
4820: 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  uct contains the
4830: 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63   busy.** callbac
4840: 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  k for the databa
4850: 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20  se handle. Each 
4860: 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61  pager opened via
4870: 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68   the sqlite.** h
4880: 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20  andle is passed 
4890: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  a pointer to sql
48a0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e  ite.busyHandler.
48b0: 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65   The busy-handle
48c0: 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73  r.** callback is
48d0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b   currently invok
48e0: 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74  ed only from wit
48f0: 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a  hin pager.c..*/.
4900: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
4910: 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48  usyHandler BusyH
4920: 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42  andler;.struct B
4930: 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69  usyHandler {.  i
4940: 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64  nt (*xFunc)(void
4950: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
4960: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4970: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20  /.  void *pArg; 
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4990: 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62  * First arg to b
49a0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
49b0: 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20    int nBusy;    
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
49d0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
49e0: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
49f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d  */.};../*.** Nam
4a00: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4a10: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20  database table. 
4a20: 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   The master data
4a30: 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73  base table.** is
4a40: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
4a50: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
4a60: 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62  names and attrib
4a70: 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75  utes of all.** u
4a80: 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ser tables and i
4a90: 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ndices..*/.#defi
4aa0: 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  ne MASTER_NAME  
4ab0: 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73       "sqlite_mas
4ac0: 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d  ter".#define TEM
4ad0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22  P_MASTER_NAME  "
4ae0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4af0: 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  er"../*.** The r
4b00: 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
4b10: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4b20: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
4b30: 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20  e MASTER_ROOT   
4b40: 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
4b50: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68   name of the sch
4b60: 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ema table..*/.#d
4b70: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42  efine SCHEMA_TAB
4b80: 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54  LE(x)  ((!OMIT_T
4b90: 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54  EMPDB)&&(x==1)?T
4ba0: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a  EMP_MASTER_NAME:
4bb0: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a  MASTER_NAME)../*
4bc0: 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63  .** A convenienc
4bd0: 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74  e macro that ret
4be0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
4bf0: 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a  of elements in.*
4c00: 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  * an array..*/.#
4c10: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
4c20: 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69  (X)    ((int)(si
4c30: 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58  zeof(X)/sizeof(X
4c40: 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65  [0])))../*.** De
4c50: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61  termine if the a
4c60: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77  rgument is a pow
4c70: 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65  er of two.*/.#de
4c80: 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77  fine IsPowerOfTw
4c90: 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d  o(X) (((X)&((X)-
4ca0: 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  1))==0)../*.** T
4cb0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
4cc0: 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74  ue as a destruct
4cd0: 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20  or means to use 
4ce0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e  sqlite3DbFree().
4cf0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44  .** The sqlite3D
4d00: 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20  bFree() routine 
4d10: 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72  requires two par
4d20: 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20  ameters instead 
4d30: 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70  of the .** one p
4d40: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65  arameter that de
4d50: 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c  structors normal
4d60: 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20  ly want.  So we 
4d70: 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63  have to introduc
4d80: 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63  e .** this magic
4d90: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
4da0: 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61  code knows to ha
4db0: 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79  ndle differently
4dc0: 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74  .  Any .** point
4dd0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
4de0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
4df0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
4e00: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
4e10: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
4e20: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
4e30: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
4e40: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
4e50: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
4e60: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
4e70: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
4e80: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
4e90: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
4ea0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
4eb0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
4ec0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
4ed0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
4ee0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
4ef0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
4f00: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
4f10: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
4f20: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
4f30: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
4f40: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
4f50: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
4f60: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
4f70: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
4f80: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
4f90: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
4fa0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
4fb0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
4fc0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
4fd0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
4fe0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
4ff0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
5000: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
5010: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
5020: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
5030: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
5040: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
5050: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
5060: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
5070: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
5080: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
5090: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
50a0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
50b0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
50c0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
50d0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
50e0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
50f0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
5100: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
5110: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
5120: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
5130: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
5140: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
5150: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
5160: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
5170: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
5180: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
5190: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
51a0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
51b0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
51c0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
51d0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
51e0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
51f0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
5200: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5210: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
5220: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
5230: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
5240: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
5250: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
5260: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
5270: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5280: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
5290: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
52a0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20  e SQLITE_WSD .  
52b0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
52c0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
52d0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
52e0: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
52f0: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
5300: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5310: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
5320: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
5330: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
5340: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
5350: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
5360: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
5370: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
5380: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a  s deliberately .
5390: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
53a0: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
53b0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
53c0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
53d0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
53e0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
53f0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
5400: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
5410: 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c  ple the .** impl
5420: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
5430: 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73   SQL aggregate s
5440: 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  tep callback may
5450: 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20   not use the.** 
5460: 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61  parameter indica
5470: 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20  ting the number 
5480: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
5490: 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65  sed to the aggre
54a0: 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b  gate,.** if it k
54b0: 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69  nows that this i
54c0: 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77  s enforced elsew
54d0: 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  here..**.** When
54e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
54f0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
5500: 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20  d at all within 
5510: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
5520: 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73  nction,.** it is
5530: 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64   generally named
5540: 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e   "NotUsed" or "N
5550: 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65  otUsed2" to make
5560: 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65   things even cle
5570: 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72  arer..** However
5580: 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d  , these macros m
5590: 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ay also be used 
55a0: 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e  to suppress warn
55b0: 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a  ings related to.
55c0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  ** parameters th
55d0: 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  at may or may no
55e0: 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64  t be used depend
55f0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69  ing on compilati
5600: 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46  on options..** F
5610: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65  or example those
5620: 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79   parameters only
5630: 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28   used in assert(
5640: 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e  ) statements. In
5650: 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20   these.** cases 
5660: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61  the parameters a
5670: 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20  re named as per 
5680: 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e  the usual conven
5690: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
56a0: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
56b0: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
56c0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
56d0: 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55  ARAMETER2(x,y) U
56e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
56f0: 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  x),UNUSED_PARAME
5700: 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f  TER(y)../*.** Fo
5710: 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73  rward references
5720: 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a   to structures.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f   AggInfo AggInfo
5750: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5760: 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74   AuthContext Aut
5770: 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  hContext;.typede
5780: 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  f struct Autoinc
5790: 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f  Info AutoincInfo
57a0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
57b0: 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a   Bitvec Bitvec;.
57c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57d0: 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a  ollSeq CollSeq;.
57e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57f0: 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79  olumn Column;.ty
5800: 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20  pedef struct Db 
5810: 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  Db;.typedef stru
5820: 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61  ct Schema Schema
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65   Expr Expr;.type
5850: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c  def struct ExprL
5860: 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79  ist ExprList;.ty
5870: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5880: 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a  rSpan ExprSpan;.
5890: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
58a0: 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65  Key FKey;.typede
58b0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  f struct FuncDes
58c0: 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74  tructor FuncDest
58d0: 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20  ructor;.typedef 
58e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46  struct FuncDef F
58f0: 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20  uncDef;.typedef 
5900: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
5910: 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a  sh FuncDefHash;.
5920: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5930: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
5940: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
5950: 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65  ex Index;.typede
5960: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  f struct IndexSa
5970: 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65  mple IndexSample
5980: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5990: 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61   KeyClass KeyCla
59a0: 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ss;.typedef stru
59b0: 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e  ct KeyInfo KeyIn
59c0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
59d0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f  ct Lookaside Loo
59e0: 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20  kaside;.typedef 
59f0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
5a00: 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  Slot LookasideSl
5a10: 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ot;.typedef stru
5a20: 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65  ct Module Module
5a30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a40: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d   NameContext Nam
5a50: 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  eContext;.typede
5a60: 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50  f struct Parse P
5a70: 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74  arse;.typedef st
5a80: 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53  ruct RowSet RowS
5a90: 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  et;.typedef stru
5aa0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76  ct Savepoint Sav
5ab0: 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20  epoint;.typedef 
5ac0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
5ad0: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
5ae0: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
5af0: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
5b00: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
5b10: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
5b20: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
5b30: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
5b50: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
5b60: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
5b70: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
5b80: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
5b90: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
5ba0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bb0: 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65   Trigger;.typede
5bc0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bd0: 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a  Prg TriggerPrg;.
5be0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5bf0: 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67  riggerStep Trigg
5c00: 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20  erStep;.typedef 
5c10: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
5c20: 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65  ecord UnpackedRe
5c30: 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74  cord;.typedef st
5c40: 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62  ruct VTable VTab
5c50: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5c60: 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43  ct VtabCtx VtabC
5c70: 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  tx;.typedef stru
5c80: 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72  ct Walker Walker
5c90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ca0: 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65   WhereInfo Where
5cb0: 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  Info;../*.** Def
5cc0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
5cd0: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
5ce0: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
5cf0: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
5d00: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
5d10: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
5d20: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
5d30: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
5d40: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
5d50: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
5d60: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
5d70: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
5d80: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
5d90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
5da0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
5db0: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
5dc0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
5dd0: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
5de0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
5df0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
5e00: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
5e10: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
5e20: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
5e30: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
5e40: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
5e50: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
5e60: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
5e70: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
5e80: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
5e90: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
5ea0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
5eb0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
5ec0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5ed0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
5ee0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
5ef0: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
5f00: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
5f10: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
5f20: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
5f30: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
5f50: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
5f60: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
5f70: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
5f80: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
5f90: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
5fa0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
5fb0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5fc0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5fd0: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5fe0: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5ff0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
6000: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
6010: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6020: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
6030: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
6040: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
6050: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
6060: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
6070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6080: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
6090: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
60a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
60b0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
60c0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
60d0: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
60e0: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
60f0: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
6100: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
6110: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
6120: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
6130: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
6140: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
6150: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
6160: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
6170: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
6180: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
6190: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
61a0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
61b0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
61c0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
61d0: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
61e0: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
61f0: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
6200: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
6210: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
6220: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
6230: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
6240: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
6250: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
6260: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
6270: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
6280: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
6290: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
62a0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
62b0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
62c0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
62d0: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
62e0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
62f0: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6300: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6310: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6320: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6330: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6340: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6350: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6360: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
6370: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
6380: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
6390: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
63a0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
63b0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
63c0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
63d0: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
63e0: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
63f0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6400: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6410: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6420: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6430: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6440: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6450: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6460: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
6470: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
6480: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
6490: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
64a0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
64b0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
64c0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
64d0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
64e0: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
64f0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6500: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6510: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6520: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6530: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6540: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6550: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6560: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
6570: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
6580: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
6590: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
65a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
65b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
65c0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
65d0: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
65e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
65f0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6600: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6610: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6620: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6630: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6640: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6650: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6660: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
6670: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
6680: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
6690: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
66a0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
66b0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
66c0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
66d0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
66e0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
66f0: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6700: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6710: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6720: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6730: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6740: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6750: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6760: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
6770: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6780: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
6790: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
67a0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
67b0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
67c0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
67d0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
67e0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
67f0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6800: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6810: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6820: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6840: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6850: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6860: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
6870: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
6880: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
6890: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
68a0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
68b0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
68c0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
68d0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
68e0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
68f0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6900: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6910: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6920: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6930: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6940: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6950: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6960: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
6970: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
6980: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
6990: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
69a0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
69b0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
69c0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
69d0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
69e0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
69f0: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6a00: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6a10: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6a20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6a30: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6a40: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6a50: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6a60: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
6a70: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
6a80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
6a90: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
6aa0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
6ab0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
6ac0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6ad0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6ae0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6af0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6b00: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6b10: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6b20: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6b30: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6b40: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6b50: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6b60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6b70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
6b80: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
6b90: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
6ba0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
6bb0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
6bc0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6bd0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6be0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6bf0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6c00: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6c10: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6c20: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6c30: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6c40: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6c50: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6c60: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
6c70: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
6c80: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
6c90: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
6ca0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
6cb0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
6cc0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6cd0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6ce0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6cf0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6d00: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6d10: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6d20: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6d30: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6d40: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6d50: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6d60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6d70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6d80: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6d90: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6da0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6db0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6dc0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6dd0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6de0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6df0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6e00: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6e10: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6e20: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6e30: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6e50: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6e60: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6e70: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6e80: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6e90: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6ea0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6eb0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6ec0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6ed0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6ee0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6ef0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6f00: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6f10: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6f20: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6f30: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6f40: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6f50: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6f60: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6f70: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6f80: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6f90: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6fa0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6fb0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6fc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6fd0: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6fe0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6ff0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
7000: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
7010: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
7020: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
7030: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
7040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
7050: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
7060: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
7070: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
7080: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
7090: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
70a0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
70b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
70c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
70d0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
70e0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
70f0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
7100: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
7110: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
7120: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
7130: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
7140: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
7150: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
7160: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
7170: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
7180: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
7190: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
71a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
71b0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
71c0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
71d0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
71e0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
71f0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
7200: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
7210: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
7220: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
7230: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
7240: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
7250: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
7260: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
7270: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
7280: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
7290: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
72a0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
72b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
72c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
72d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
72e0: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
72f0: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7300: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7320: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7330: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7340: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7350: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7360: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
7370: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
7380: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
7390: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
73a0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
73b0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
73c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
73d0: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
73e0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
73f0: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7400: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7420: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7430: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7450: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7460: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
7470: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
7480: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
7490: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
74a0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
74b0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
74c0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
74e0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
74f0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7500: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
7510: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
7520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
7530: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
7540: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
7550: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7560: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7570: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7580: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7590: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
75a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
75b0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
75c0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
75d0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
75e0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
7600: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7610: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7620: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7630: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7650: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7660: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7670: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7680: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
76a0: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
76b0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
76c0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
76d0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
76e0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
76f0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
7700: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7710: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7720: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7730: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7740: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7750: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7760: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7770: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7780: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7790: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
77a0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
77b0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
77c0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
77d0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
77e0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
77f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
7800: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7810: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7820: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7830: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7840: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7850: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7860: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7870: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7880: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7890: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
78a0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
78b0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
78c0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
78d0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
78e0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
78f0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
7900: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7930: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7940: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7950: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7980: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7990: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79a0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
79b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
79c0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
79d0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
79e0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79f0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
7a00: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7a10: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7a20: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7a30: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7a40: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7a50: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7a60: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7a70: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7a80: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7a90: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7aa0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
7ab0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ad0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
7ae0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
7af0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
7b00: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7b10: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7b20: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7b30: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7b40: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7b50: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7b60: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7b70: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7b80: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7b90: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
7ba0: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
7bb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7bc0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
7bd0: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
7be0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c00: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c10: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c20: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
7c30: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c60: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c70: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
7c80: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ca0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
7cb0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
7cc0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
7cd0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
7ce0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7cf0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
7d00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
7d10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
7d20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
7d30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
7d40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
7d50: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
7d60: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
7d70: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
7d80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7d90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
7da0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7dc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
7dd0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
7de0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
7df0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
7e00: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
7e10: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
7e20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7e30: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
7e60: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
7e70: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
7e80: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ea0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
7eb0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7ec0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
7ed0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
7ee0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
7ef0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
7f10: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7f30: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
7f40: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7f50: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
7f60: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
7f70: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
7f80: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
7fa0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
7fb0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
7fc0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
7fd0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
7fe0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
7ff0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
8000: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
8010: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
8020: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
8030: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
8040: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
8050: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
8060: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8070: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
8080: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
8090: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
80a0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
80b0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
80c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
80d0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
80e0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
80f0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
8100: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
8110: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8120: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8130: 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20  ssage */.  char 
8140: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
8150: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8160: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8170: 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63  ssage (UTF-8 enc
8180: 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20  oded) */.  char 
8190: 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20  *zErrMsg16;     
81a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
81b0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
81c0: 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e  ssage (UTF-16 en
81d0: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f  coded) */.  unio
81e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
81f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8200: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8210: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
8220: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
8230: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
8240: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
8250: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
8260: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
8270: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
8280: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
8290: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
82a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
82b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
82c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
82d0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
82e0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
82f0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8300: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8310: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8340: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8350: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8360: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8380: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8390: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
83a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
83b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
83c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
83d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
83e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
83f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8400: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8410: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8420: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8430: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8440: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8450: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8460: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8470: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8480: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8490: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
84a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
84b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
84c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
84d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
84e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
84f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8500: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8510: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8520: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8530: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8540: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8550: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8560: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8570: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8580: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8590: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
85a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
85b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
85e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
85f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8600: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8610: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8620: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8630: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8640: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8650: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8660: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8670: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8680: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8690: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
86a0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
86b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
86c0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
86d0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
86e0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
86f0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8700: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8710: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8720: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8730: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8740: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8750: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8760: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8770: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8780: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8790: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
87a0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
87b0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
87c0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
87d0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
87e0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
87f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8800: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8810: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8820: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8830: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8840: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8850: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8860: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8870: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8880: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8890: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
88a0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
88b0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
88c0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
88d0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
88e0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
88f0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
8900: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
8910: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8930: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8940: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8950: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8970: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8980: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8990: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
89a0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
89b0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
89c0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
89d0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
89e0: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
89f0: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
8a00: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
8a10: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
8a20: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
8a30: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
8a40: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
8a50: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
8a60: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
8a70: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
8a80: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
8a90: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
8aa0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
8ab0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
8ac0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
8ad0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
8ae0: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
8af0: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
8b00: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
8b10: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
8b20: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
8b30: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
8b40: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
8b50: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
8b60: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
8b70: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
8b80: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8b90: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
8ba0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
8bb0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
8bc0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
8bd0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8be0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8bf0: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
8c00: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
8c10: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
8c20: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
8c30: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
8c40: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
8c50: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
8c60: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
8c70: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
8c80: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
8c90: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
8ca0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
8cb0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
8cc0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
8cd0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
8ce0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
8cf0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
8d00: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
8d10: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
8d20: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
8d30: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
8d40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
8d50: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
8d60: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
8d70: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
8d80: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
8d90: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
8da0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
8db0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
8dc0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
8dd0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
8de0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
8df0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
8e00: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
8e10: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
8e20: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
8e30: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
8e40: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
8e50: 30 38 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  08  /* Show shor
8e60: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
8e70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8e80: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
8e90: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
8ea0: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
8eb0: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
8ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
8ef0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
8f00: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
8f40: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
8f50: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
8f60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
8f70: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
8f80: 30 30 30 30 32 30 20 20 2f 2a 20 49 6e 76 6f 6b  000020  /* Invok
8f90: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
8fa0: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
8fe0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
8ff0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9000: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
9010: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
9020: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
9030: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
9040: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9050: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
9060: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
9070: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
9080: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
9090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
90a0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
90b0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
90c0: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
90d0: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
90e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
90f0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30  eAddopTrace 0x00
9100: 30 30 30 32 30 30 20 20 2f 2a 20 54 72 61 63 65  000200  /* Trace
9110: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9120: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
9130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
9140: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
9150: 30 30 34 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00400  /* Do not
9160: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
9170: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
9180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
9190: 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30  dUncommitted 0x0
91a0: 30 30 30 38 30 30 20 20 2f 2a 20 46 6f 72 20 73  000800  /* For s
91b0: 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
91c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
91d0: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
91e0: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
91f0: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
9200: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
9210: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
9220: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
9230: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
9240: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
9250: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
9260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9270: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
9280: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
9290: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
92a0: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
92b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
92c0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
92d0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 49 67  x00008000  /* Ig
92e0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
92f0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
9300: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
9310: 72 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  r   0x00010000  
9320: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
9330: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
9340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
9350: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
9360: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
9370: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
9380: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
9390: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
93a0: 4b 65 79 73 20 20 20 20 30 78 30 30 30 34 30 30  Keys    0x000400
93b0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
93c0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
93d0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
93e0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
93f0: 64 65 78 20 20 20 20 20 20 30 78 30 30 30 38 30  dex      0x00080
9400: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
9410: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
9420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9430: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
9440: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9450: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
9460: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
9490: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00200000  /* En
94a0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
94b0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
94c0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
94d0: 67 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20  ger  0x00400000 
94e0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
94f0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
9500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
9510: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
9520: 30 38 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0800000  /* Defe
9530: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
9540: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9550: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
9560: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9570: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
9580: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
9590: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
95a0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
95b0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
95c0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
95d0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
95e0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
95f0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
9600: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
9610: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
9620: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
9630: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
9640: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
9650: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
9660: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
9670: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
9680: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
9690: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
96a0: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
96b0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
96c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
96d0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
96e0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
96f0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
9700: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
9710: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
9720: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
9730: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
9740: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
9750: 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  e SQLITE_IdxReal
9760: 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20 20  AsInt   0x0010  
9770: 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20 61   /* Store REAL a
9780: 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65 73  s INT in indices
9790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
97a0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
97b0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
97c0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
97d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
97e0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
97f0: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
9800: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
9810: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
9820: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
9830: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
9840: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
9850: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
9860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9870: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
9880: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
9890: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
98a0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
98b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
98c0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
98d0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
98e0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
98f0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9900: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
9910: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
9920: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
9930: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
9940: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
9950: 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30  at3          0x0
9960: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65  800   /* Use the
9970: 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61   SQLITE_STAT3 ta
9980: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
9990: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
99a0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
99b0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
99c0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
99d0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
99e0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
99f0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9a00: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
9a10: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
9a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
9a30: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
9a40: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
9a50: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
9a60: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a70: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
9a80: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9a90: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9aa0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
9ab0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
9ac0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9ad0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9ae0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9af0: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9b00: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9b10: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9b20: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9b30: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9b40: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9b50: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9b60: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9b70: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9b80: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9b90: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9ba0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9bb0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9bc0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9bd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9be0: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9bf0: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9c00: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9c10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c20: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9c30: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9c40: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9c50: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9c60: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9c70: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9c80: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9c90: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9ca0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9cb0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9cc0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9cd0: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9ce0: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9cf0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9d00: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9d10: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9d20: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9d30: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9d40: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9d50: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9d60: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9d70: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9d80: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9d90: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9da0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9db0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9dc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9dd0: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9de0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9df0: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9e00: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9e10: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9e20: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9e30: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9e40: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9e50: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9e60: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9e70: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9e80: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9e90: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9ea0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9ec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9ed0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9ee0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9ef0: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9f00: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9f10: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9f20: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9f30: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9f40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9f50: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9f60: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9f70: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9f80: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9f90: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9fa0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9fb0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9fc0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9fd0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9fe0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9ff0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
a000: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
a010: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
a020: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
a030: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
a040: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a050: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a060: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a070: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a080: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a090: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a0a0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a0b0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a0c0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a0d0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a0e0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a0f0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a100: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a110: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a120: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a130: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a140: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a150: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a160: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a170: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a180: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a190: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a1a0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a1b0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a1c0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a1d0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a1e0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a1f0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a200: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a210: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a220: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a230: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a240: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a250: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a260: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a270: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a280: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a290: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a2a0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a2b0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a2c0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a2d0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a2e0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a2f0: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a300: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a310: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a320: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a330: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a340: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a350: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a360: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a370: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a380: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a390: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a3a0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a3b0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a3c0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a3d0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a3e0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a3f0: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a400: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a410: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a420: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a430: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a440: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a450: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a460: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a470: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a480: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a490: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a4a0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a4b0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a4c0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a4d0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a4e0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a4f0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a500: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a510: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a520: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a530: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a540: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a550: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a560: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a570: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a580: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a590: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a5a0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a5b0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a5c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a5d0: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a5e0: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a5f0: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a600: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a610: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a620: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a630: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a640: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a650: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a660: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a670: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a680: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a690: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6a0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a6b0: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a6c0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a6d0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a6e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6f0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a700: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a710: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a720: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a730: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a740: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a750: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a760: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a770: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a780: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a790: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a7a0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a7b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a7c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a7d0: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a7e0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a7f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a800: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a810: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a820: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a830: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a840: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a850: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a860: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a870: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a880: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a890: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a8a0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a8b0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a8c0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a8d0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a8e0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a8f0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a900: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a910: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a920: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a930: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a940: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a950: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a960: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a970: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a980: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a990: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a9a0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a9b0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a9c0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a9d0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a9e0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a9f0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
aa00: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
aa10: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
aa20: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
aa30: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
aa40: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
aa50: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
aa60: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
aa70: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
aa80: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
aa90: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
aaa0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aab0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
aac0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aad0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aae0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aaf0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
ab00: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
ab10: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
ab20: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
ab30: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
ab40: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
ab50: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
ab60: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ab70: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ab80: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ab90: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
aba0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
abb0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
abc0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
abd0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
abe0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
abf0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ac00: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
ac10: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
ac20: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
ac30: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
ac40: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
ac50: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ac60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ac70: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ac80: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ac90: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
aca0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
acb0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
acc0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
acd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ace0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
acf0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ad00: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ad10: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
ad20: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ad30: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ad40: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ad50: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ad60: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ad70: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ad80: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
ad90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ada0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
adb0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
adc0: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
add0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ade0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
adf0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ae00: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ae10: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae20: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae30: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
ae40: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ae50: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ae60: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ae70: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
ae80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ae90: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
aea0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
aeb0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
aec0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
aed0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
aee0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
aef0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
af00: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
af10: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
af20: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
af30: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
af40: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
af50: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
af60: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
af70: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
af80: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
af90: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
afa0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
afb0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
afc0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
afd0: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
afe0: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
aff0: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
b000: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
b010: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
b020: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
b030: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
b040: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
b050: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
b060: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
b070: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
b080: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
b090: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
b0a0: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
b0b0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b0c0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b0d0: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b0e0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b110: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b120: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b130: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b150: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b160: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b170: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
b180: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
b190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b1a0: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
b1b0: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
b1c0: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
b1f0: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
b200: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
b210: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
b220: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
b230: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
b240: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
b250: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
b260: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
b270: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
b280: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
b290: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
b2a0: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
b2b0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b2c0: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
b2d0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
b2e0: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
b2f0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
b300: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
b310: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
b320: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
b330: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
b340: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
b350: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
b360: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
b370: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
b380: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
b390: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
b3a0: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
b3b0: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
b3c0: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
b3d0: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
b3e0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
b410: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
b420: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
b430: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b450: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
b460: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
b470: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
b480: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
b490: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
b4a0: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
b4b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
b4c0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
b4d0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
b4e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
b4f0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
b500: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
b510: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
b520: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
b530: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
b540: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
b550: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
b560: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
b570: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
b580: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
b590: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
b5a0: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
b5b0: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
b5c0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
b5d0: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
b5e0: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
b5f0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
b600: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
b610: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
b620: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
b630: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
b640: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
b650: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
b660: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
b670: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
b680: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
b690: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
b6a0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
b6b0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
b6c0: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
b6d0: 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  16 colFlags;    
b6e0: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
b6f0: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
b700: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
b710: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
b720: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
b730: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
b740: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
b750: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
b760: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
b770: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
b780: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
b790: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
b7a0: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
b7b0: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
b7c0: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
b7d0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
b7e0: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
b7f0: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
b800: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
b810: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
b820: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
b830: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
b840: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
b850: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
b860: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
b870: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
b880: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
b890: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
b8a0: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
b8b0: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
b8c0: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
b8d0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
b8e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b8f0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
b900: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
b910: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
b920: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
b930: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
b940: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
b950: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
b960: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
b970: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
b980: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
b990: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b9a0: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
b9b0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
b9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
b9d0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
b9e0: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
b9f0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ba10: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
ba20: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
ba30: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
ba40: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
ba50: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
ba60: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
ba70: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
ba80: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
ba90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
baa0: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
bab0: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
bac0: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
bad0: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
bae0: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
baf0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
bb00: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
bb10: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
bb20: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
bb30: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
bb40: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
bb50: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
bb60: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
bb70: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
bb80: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
bb90: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
bba0: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
bbb0: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
bbc0: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
bbd0: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
bbe0: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
bbf0: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
bc00: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
bc10: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
bc20: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
bc30: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
bc40: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
bc50: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
bc60: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
bc70: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
bc80: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
bc90: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
bca0: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
bcb0: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
bcc0: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
bcd0: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
bce0: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
bcf0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
bd00: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
bd10: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
bd20: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
bd30: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
bd40: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
bd50: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
bd60: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
bd70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd80: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
bd90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bda0: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
bdb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdc0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
bdd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bde0: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
bdf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be00: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
be10: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
be20: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
be30: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
be40: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
be50: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
be60: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
be70: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
be80: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
be90: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
bea0: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
beb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bec0: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
bed0: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
bee0: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
bef0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
bf00: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
bf10: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
bf20: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
bf30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
bf40: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
bf50: 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x08  /* jumps i
bf60: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
bf70: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
bf80: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
bf90: 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a  P2      0x10  /*
bfa0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
bfb0: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
bfc0: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
bfd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
bfe0: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
bff0: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a  * NULL=NULL */..
c000: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
c010: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
c020: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
c030: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
c040: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
c050: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c060: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
c070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
c080: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
c090: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
c0a0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
c0b0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
c0c0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
c0d0: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
c0e0: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
c0f0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
c100: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
c110: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
c120: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
c130: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
c140: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
c150: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
c160: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
c170: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
c180: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
c190: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
c1a0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c1b0: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
c1c0: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
c1d0: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
c1e0: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
c1f0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
c200: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
c210: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
c220: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
c230: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c240: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
c250: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
c260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c270: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
c280: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
c290: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
c2a0: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
c2b0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
c2c0: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
c2d0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c2e0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
c2f0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
c300: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
c310: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
c320: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
c330: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
c340: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
c350: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
c360: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
c370: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
c380: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
c390: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
c3a0: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
c3b0: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
c3c0: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
c3d0: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
c3e0: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
c3f0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
c400: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
c410: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
c420: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
c430: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
c440: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
c450: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
c460: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
c470: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
c480: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
c490: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
c4a0: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c4b0: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
c4c0: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
c4d0: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
c4e0: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
c4f0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
c500: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
c510: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
c520: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
c530: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
c540: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
c550: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
c560: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
c570: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
c580: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
c590: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
c5a0: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
c5b0: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
c5c0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
c5d0: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
c5e0: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
c5f0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
c600: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
c610: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
c620: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
c630: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
c640: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
c650: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
c660: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
c670: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
c680: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
c690: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c6a0: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
c6b0: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
c6c0: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
c6d0: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
c6e0: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
c6f0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
c700: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
c710: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
c720: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
c730: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
c740: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
c750: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c760: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
c770: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
c780: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
c790: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
c7a0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
c7b0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
c7c0: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
c7d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
c7e0: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
c7f0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
c800: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
c810: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
c820: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
c830: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
c840: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
c850: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
c860: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
c870: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
c880: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
c890: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
c8a0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
c8b0: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
c8c0: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
c8d0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c8e0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
c8f0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
c900: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
c910: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
c920: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
c930: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
c940: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
c950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c960: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
c970: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
c980: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
c990: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
c9a0: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
c9b0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c9c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
c9d0: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
c9e0: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
c9f0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
ca00: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
ca10: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
ca20: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
ca30: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
ca40: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
ca50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
ca60: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
ca70: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ca90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
caa0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
cab0: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
cac0: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
cad0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
cae0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
caf0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
cb00: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
cb10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
cb20: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
cb30: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
cb40: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
cb50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
cb60: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
cb70: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
cb80: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
cb90: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
cba0: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
cbb0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
cbc0: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
cbd0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
cbe0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
cbf0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cc00: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
cc10: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
cc20: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
cc30: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
cc40: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
cc50: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
cc60: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
cc70: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
cc80: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
cc90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
cca0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
ccb0: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
ccc0: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
ccd0: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
cce0: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
ccf0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
cd00: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
cd10: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
cd20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
cd30: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
cd40: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
cd50: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
cd60: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
cd70: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
cd80: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
cd90: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
cda0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
cdb0: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
cdc0: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
cdd0: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
cde0: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
cdf0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
ce00: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
ce10: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
ce20: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
ce30: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
ce40: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
ce50: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
ce60: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
ce70: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
ce80: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
ce90: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
cea0: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
ceb0: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
cec0: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
ced0: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
cee0: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
cef0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
cf00: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
cf10: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
cf20: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
cf30: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
cf40: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
cf50: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
cf60: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
cf70: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
cf80: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
cf90: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
cfa0: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
cfb0: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
cfc0: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
cfd0: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
cfe0: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
cff0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
d000: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
d010: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
d020: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
d030: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
d040: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
d050: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
d060: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
d070: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
d080: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
d090: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
d0a0: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
d0b0: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
d0c0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
d0d0: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
d0e0: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
d0f0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
d100: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
d110: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
d120: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
d130: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
d140: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
d150: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
d160: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
d170: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
d180: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
d190: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
d1a0: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
d1b0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d1c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d1d0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
d1e0: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
d1f0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
d200: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
d210: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d220: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
d230: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
d240: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
d250: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
d260: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
d270: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
d280: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
d290: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
d2a0: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
d2b0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
d2c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
d2d0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
d2e0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
d2f0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d300: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
d310: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
d320: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
d330: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
d340: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
d350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
d360: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
d370: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
d380: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
d390: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f   */.#endif.  tRo
d3a0: 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20  wcnt nRowEst;   
d3b0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
d3c0: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
d3d0: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
d3e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
d3f0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
d400: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
d410: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
d420: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
d430: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
d440: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
d450: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
d460: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
d470: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
d480: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
d490: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
d4a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
d4b0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
d4c0: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d4e0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
d4f0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
d500: 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  */.  u8 tabFlags
d510: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
d520: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
d530: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
d540: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
d550: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
d560: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
d570: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
d580: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d590: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
d5a0: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
d5b0: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
d5c0: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
d5d0: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
d5e0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
d5f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d610: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
d620: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
d630: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d640: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
d650: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
d660: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
d670: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
d680: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
d690: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
d6a0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
d6b0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
d6c0: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
d6d0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
d6e0: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
d6f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
d700: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
d710: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
d720: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
d730: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
d740: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
d750: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
d760: 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
d770: 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
d780: 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
d790: 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
d7a0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
d7b0: 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61   for Tabe.tabFla
d7c0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
d7d0: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
d7e0: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
d7f0: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
d800: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
d810: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
d820: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
d830: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
d840: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
d850: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
d860: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
d870: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
d880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
d890: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
d8a0: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
d8b0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
d8c0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
d8d0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
d8e0: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
d8f0: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
d900: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a  tual table */...
d910: 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
d920: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
d930: 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
d940: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
d950: 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
d960: 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
d970: 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
d980: 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
d990: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
d9a0: 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
d9b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
d9c0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
d9d0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d9e0: 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
d9f0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
da00: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
da10: 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
da20: 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
da30: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
da40: 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
da50: 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
da60: 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20  N)!=0).#else.#  
da70: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
da80: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
da90: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
daa0: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
dab0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
dac0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
dad0: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
dae0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
daf0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
db00: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
db10: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
db20: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
db30: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
db40: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
db50: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
db60: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
db70: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
db80: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
db90: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
dba0: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
dbb0: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
dbc0: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
dbd0: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
dbe0: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
dbf0: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
dc00: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
dc10: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
dc20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
dc30: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
dc40: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
dc50: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
dc60: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
dc70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
dc80: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
dc90: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
dca0: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
dcb0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
dcc0: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
dcd0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
dce0: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
dcf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
dd00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
dd10: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
dd20: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
dd30: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
dd40: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
dd50: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
dd60: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
dd70: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
dd80: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
dd90: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
dda0: 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  cked..*/.struct 
ddb0: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
ddc0: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
ddd0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
dde0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ddf0: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
de00: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
de10: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
de20: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20   foreign key in 
de30: 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
de40: 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
de50: 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
de60: 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
de70: 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
de80: 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
de90: 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
dea0: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  t foreign key on
deb0: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
dec0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
ded0: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
dee0: 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ous foreign key 
def0: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
df00: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
df10: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
df20: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
df30: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
df40: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
df50: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
df60: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
df70: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
df80: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
df90: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
dfa0: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
dfb0: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  on[2];          
dfc0: 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
dfd0: 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
dfe0: 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
dff0: 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
e000: 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a  pTrigger[2];  /*
e010: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
e020: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
e030: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
e040: 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e  Map {  /* Mappin
e050: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
e060: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
e070: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
e080: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
e090: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
e0a0: 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
e0b0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
e0c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
e0d0: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
e0e0: 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d  .  If 0 use PRIM
e0f0: 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
e100: 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f  Col[1];        /
e110: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
e120: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
e130: 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  umn s */.};../*.
e140: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
e150: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
e160: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
e170: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
e180: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
e190: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
e1a0: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
e1b0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
e1c0: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
e1d0: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
e1e0: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
e1f0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
e200: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
e210: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
e220: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
e230: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
e240: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
e250: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
e260: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
e270: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
e280: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
e290: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
e2a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
e2b0: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
e2c0: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
e2d0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
e2e0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
e2f0: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
e300: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
e310: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
e320: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
e330: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
e340: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
e350: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
e360: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
e370: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
e380: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
e390: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
e3a0: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
e3b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
e3c0: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
e3d0: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
e3e0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
e3f0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
e400: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
e410: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
e420: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
e430: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
e440: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
e450: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
e460: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
e470: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
e480: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
e490: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
e4a0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
e4b0: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
e4c0: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
e4d0: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
e4e0: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
e4f0: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
e500: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
e510: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
e520: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
e530: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
e540: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
e550: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
e560: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
e570: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
e580: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
e590: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
e5a0: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
e5b0: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
e5c0: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
e5d0: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
e5e0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
e5f0: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
e600: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
e610: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
e620: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
e630: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
e640: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
e650: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
e660: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
e670: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
e680: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
e690: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
e6a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
e6b0: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
e6c0: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
e6d0: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
e6e0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
e6f0: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
e700: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
e710: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
e720: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e730: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
e740: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
e750: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
e760: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
e770: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e780: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
e790: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
e7a0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
e7b0: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
e7c0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e7d0: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
e7e0: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
e7f0: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
e800: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
e810: 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
e820: 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
e830: 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
e840: 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
e850: 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
e860: 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
e870: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
e880: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
e890: 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
e8a0: 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
e8b0: 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
e8c0: 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
e8d0: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e8e0: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e8f0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e900: 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
e910: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e920: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e930: 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
e940: 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
e950: 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
e960: 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
e970: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
e980: 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f  fault  99  /* Do
e990: 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
e9a0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
e9b0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
e9c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e9d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e9e0: 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
e9f0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
ea00: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
ea10: 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
ea20: 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
ea30: 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
ea40: 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
ea50: 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
ea60: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
ea70: 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
ea80: 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
ea90: 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
eaa0: 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
eab0: 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
eac0: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
ead0: 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
eae0: 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
eaf0: 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
eb00: 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
eb10: 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74  eyInfo {.  sqlit
eb20: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
eb30: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
eb40: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
eb50: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
eb60: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
eb70: 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
eb80: 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
eb90: 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
eba0: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
ebb0: 4d 61 78 69 6d 75 6d 20 69 6e 64 65 78 20 66 6f  Maximum index fo
ebc0: 72 20 61 43 6f 6c 6c 5b 5d 20 61 6e 64 20 61 53  r aColl[] and aS
ebd0: 6f 72 74 4f 72 64 65 72 5b 5d 20 2a 2f 0a 20 20  ortOrder[] */.  
ebe0: 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
ebf0: 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
ec00: 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
ec10: 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
ec20: 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
ec30: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ec40: 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
ec50: 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
ec60: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
ec70: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ec80: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
ec90: 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
eca0: 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
ecb0: 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
ecc0: 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
ecd0: 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
ece0: 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
ecf0: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
ed00: 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
ed10: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
ed20: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
ed30: 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
ed40: 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
ed50: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
ed60: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
ed70: 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
ed80: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
ed90: 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
eda0: 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
edb0: 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
edc0: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
edd0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
ede0: 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
edf0: 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
ee00: 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
ee10: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
ee20: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
ee30: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
ee40: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
ee50: 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
ee60: 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
ee70: 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
ee80: 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75   fields..*/.stru
ee90: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
eea0: 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
eeb0: 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
eec0: 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
eed0: 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
eee0: 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  n */.  u16 nFiel
eef0: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
ef00: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
ef10: 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
ef20: 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  u8 flags;       
ef30: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73      /* Boolean s
ef40: 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b  ettings.  UNPACK
ef50: 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a  ED_... below */.
ef60: 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
ef70: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
ef80: 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
ef90: 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d  _SEARCH */.  Mem
efa0: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
efb0: 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b   /* Values */.};
efc0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
efd0: 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b  values of Unpack
efe0: 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a  edRecord.flags.*
eff0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
f000: 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20  ED_INCRKEY      
f010: 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74   0x01  /* Make t
f020: 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c  his key an epsil
f030: 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65  on larger */.#de
f040: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
f050: 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32  EFIX_MATCH  0x02
f060: 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61    /* A prefix ma
f070: 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tch is considere
f080: 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  d OK */.#define 
f090: 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
f0a0: 53 45 41 52 43 48 20 30 78 30 34 20 20 2f 2a 20  SEARCH 0x04  /* 
f0b0: 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28 72 6f  Ignore final (ro
f0c0: 77 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a 0a 2f  wid) field */../
f0d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
f0e0: 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
f0f0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
f100: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
f110: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
f120: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
f130: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
f140: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
f150: 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
f160: 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
f170: 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
f180: 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
f190: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
f1a0: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
f1b0: 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
f1c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
f1d0: 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
f1e0: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
f1f0: 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
f200: 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
f210: 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
f220: 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
f230: 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
f240: 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
f250: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
f260: 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
f270: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
f280: 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
f290: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
f2a0: 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
f2b0: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
f2c0: 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
f2d0: 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
f2e0: 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
f2f0: 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
f300: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
f310: 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
f320: 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
f330: 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
f340: 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
f350: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
f360: 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
f370: 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
f380: 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
f390: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
f3a0: 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
f3b0: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
f3c0: 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
f3d0: 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
f3e0: 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
f3f0: 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
f400: 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
f410: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
f420: 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
f430: 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
f440: 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
f450: 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
f460: 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
f470: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
f480: 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
f490: 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
f4a0: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
f4b0: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
f4c0: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
f4d0: 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
f4e0: 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
f4f0: 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
f500: 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
f510: 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
f520: 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
f530: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
f540: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
f550: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
f560: 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
f570: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
f580: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f5a0: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
f5b0: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43  ex */.  int *aiC
f5c0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
f5d0: 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
f5e0: 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
f5f0: 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
f600: 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  s 0 */.  tRowcnt
f610: 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
f620: 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
f630: 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
f640: 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
f650: 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
f660: 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
f670: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
f680: 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
f690: 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
f6a0: 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
f6b0: 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
f6c0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
f6d0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
f6e0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
f6f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f700: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
f710: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f720: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
f730: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f740: 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
f750: 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
f760: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
f770: 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
f780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
f790: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
f7a0: 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
f7b0: 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a  =ASC */.  char *
f7c0: 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  *azColl;        
f7d0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
f7e0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
f7f0: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
f800: 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
f810: 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
f820: 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
f830: 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
f840: 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ces */.  int tnu
f850: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
f860: 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
f870: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f880: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f890: 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
f8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f8b0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
f8c0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
f8d0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f8e0: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f8f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
f900: 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
f910: 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
f920: 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
f930: 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32  gned autoIndex:2
f940: 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55  ;    /* 1==UNIQU
f950: 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
f960: 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
f970: 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
f980: 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
f990: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f9a0: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f9b0: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f9c0: 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
f9d0: 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
f9e0: 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
f9f0: 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
fa00: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66  l columns */.#if
fa10: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
fa20: 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e 53  E_STAT3.  int nS
fa30: 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
fa40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fa50: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
fa60: 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77 63  ple[] */.  tRowc
fa70: 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20 20  nt avgEq;       
fa80: 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
fa90: 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79  Eq value for key
faa0: 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20 61   values not in a
fab0: 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
fac0: 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
fad0: 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
fae0: 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
faf0: 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
fb00: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
fb10: 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
fb20: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
fb30: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
fb40: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
fb50: 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
fb60: 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
fb70: 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
fb80: 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
fb90: 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
fba0: 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
fbb0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fbc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fbd0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
fbe0: 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  le {.  union {. 
fbf0: 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20     char *z;     
fc00: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fc10: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 54  Type is SQLITE_T
fc20: 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42 4c  EXT or SQLITE_BL
fc30: 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  OB */.    double
fc40: 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c   r;       /* Val
fc50: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fc60: 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20  QLITE_FLOAT */. 
fc70: 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20     i64 i;       
fc80: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fc90: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 49  Type is SQLITE_I
fca0: 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b  NTEGER */.  } u;
fcb0: 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
fcc0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
fcd0: 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45  ULL, SQLITE_INTE
fce0: 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a  GER ... etc. */.
fcf0: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
fd00: 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62      /* Size in b
fd10: 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62  yte of text or b
fd20: 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  lob. */.  tRowcn
fd30: 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20 45  t nEq;      /* E
fd40: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
fd50: 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
fd60: 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
fd70: 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
fd80: 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45 73   nLt;      /* Es
fd90: 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
fda0: 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
fdb0: 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
fdc0: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
fdd0: 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20 45  t nDLt;     /* E
fde0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
fdf0: 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
fe00: 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
fe10: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
fe20: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
fe30: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
fe40: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
fe50: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
fe60: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
fe70: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
fe80: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
fe90: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
fea0: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
feb0: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
fec0: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
fed0: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
fee0: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
fef0: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
ff00: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
ff10: 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
ff20: 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
ff30: 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
ff40: 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
ff50: 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
ff60: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
ff70: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
ff80: 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
ff90: 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
ffa0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
ffb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ffc0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
ffd0: 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
ffe0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
fff0: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
10000 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
10010 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
10020 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
10030 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
10040 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
10050 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10060 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
10070 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
10080 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
10090 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
100a0 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
100b0 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
100c0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
100d0 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
100e0 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
100f0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
10100 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
10110 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
10120 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
10130 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
10140 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
10150 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
10160 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
10170 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
10180 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
10190 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
101a0 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
101b0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
101c0 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
101d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
101e0 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
101f0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
10200 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
10210 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
10220 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
10230 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
10240 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
10250 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
10260 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
10270 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
10280 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
10290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
102b0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
102c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
102d0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
102e0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
102f0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
10300 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
10310 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
10320 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
10330 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
10340 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
10350 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
10360 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
10370 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10380 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
10390 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
103a0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
103b0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
103c0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
103d0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
103e0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
103f0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
10400 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10410 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
10420 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10430 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
10440 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
10450 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
10460 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10470 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
10480 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
10490 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
104a0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
104b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
104c0 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
104d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
104e0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
104f0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
10500 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
10510 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10520 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
10530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
10540 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
10550 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
10560 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
10570 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
10580 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
10590 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
105a0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
105b0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
105c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
105d0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
105e0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
105f0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
10600 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10610 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
10620 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
10630 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
10640 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
10650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10660 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
10670 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
10680 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
10690 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
106a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
106b0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
106c0 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
106f0 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
10700 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
10710 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
10740 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10750 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10760 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
10770 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
10780 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
10790 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
107b0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
107c0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
107d0 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
107e0 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
107f0 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
10800 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
10810 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
10820 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
10830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
10840 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
10850 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
10860 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
10870 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
10880 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
10890 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
108a0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
108b0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
108c0 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
108d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
108e0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
108f0 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
10900 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
10910 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
10920 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
10930 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
10940 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
10950 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
10960 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
10970 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
10980 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
10990 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
109a0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
109b0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
109c0 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
109d0 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
109e0 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
109f0 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
10a00 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
10a10 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
10a20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
10a30 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
10a40 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
10a50 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
10a60 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
10a70 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
10a80 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
10a90 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
10aa0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
10ab0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
10ac0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
10ad0 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
10ae0 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
10af0 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
10b00 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
10b10 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
10b20 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
10b30 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
10b40 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
10b50 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
10b60 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
10b70 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
10b80 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
10b90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
10ba0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
10bb0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
10bc0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
10bd0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
10be0 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
10bf0 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
10c00 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
10c10 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
10c20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
10c30 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
10c40 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
10c50 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
10c60 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
10c70 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10c80 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
10c90 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
10ca0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
10cb0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
10cc0 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
10cd0 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
10ce0 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
10cf0 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
10d00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10d10 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10d20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
10d30 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
10d40 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
10d50 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
10d60 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10d70 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
10d80 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
10d90 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
10da0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
10db0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
10dc0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
10dd0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10de0 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
10df0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
10e00 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10e10 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10e20 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
10e30 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
10e40 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10e50 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
10e60 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
10e70 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
10e80 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
10e90 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
10ea0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
10eb0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
10ec0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
10ed0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
10ee0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
10ef0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
10f00 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
10f10 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10f20 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10f30 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
10f40 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
10f50 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
10f60 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
10f70 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
10f80 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
10f90 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
10fa0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10fb0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
10fc0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
10fd0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
10fe0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
10ff0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
11000 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
11010 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
11020 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
11030 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
11040 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
11050 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
11060 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
11070 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
11080 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
11090 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
110a0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
110b0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
110c0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
110d0 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
110e0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
110f0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
11100 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
11110 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
11120 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
11130 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
11140 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
11150 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
11160 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
11170 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
11180 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
11190 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
111a0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
111b0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
111c0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
111d0 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
111e0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
111f0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
11200 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
11210 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
11220 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
11230 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
11240 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
11250 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
11260 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
11270 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
11280 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
11290 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
112a0 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
112b0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
112c0 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
112d0 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
112e0 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
112f0 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
11300 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
11310 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11320 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11330 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
11340 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
11350 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
11360 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
11370 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
11380 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
11390 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
113a0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
113b0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
113c0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
113d0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
113e0 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
113f0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
11400 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
11410 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
11420 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
11430 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
11440 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
11450 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
11460 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
11470 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
11480 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
11490 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
114a0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
114b0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
114c0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
114d0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
114e0 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
114f0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
11500 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
11510 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
11520 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
11530 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
11540 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
11550 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
11560 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
11570 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
11580 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
11590 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
115a0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
115b0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
115c0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
115d0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
115e0 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
115f0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11600 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11610 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
11620 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
11630 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
11640 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
11650 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
11660 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
11670 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
11680 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
11690 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
116a0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
116b0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
116c0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
116d0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
116e0 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
116f0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
11700 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
11710 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
11720 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
11730 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
11740 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
11750 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
11760 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
11770 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
11780 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
11790 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
117a0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
117b0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
117c0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
117d0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
117e0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
117f0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
11800 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
11810 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
11820 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
11830 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
11840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
11850 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
11860 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
11870 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
11880 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
11890 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
118a0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
118b0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
118c0 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
118d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
118e0 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
118f0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
11900 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
11910 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
11920 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
11930 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
11940 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
11950 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
11960 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11970 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
11980 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
11990 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
119a0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
119b0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
119c0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
119d0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
119e0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
119f0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
11a00 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
11a10 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
11a20 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
11a30 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
11a40 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
11a50 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
11a60 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
11a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ab0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
11ac0 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
11ad0 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
11ae0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
11af0 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
11b00 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
11b10 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
11b20 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
11b30 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
11b40 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20  arguments or in 
11b50 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70  "<expr> IN (<exp
11b60 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20 20  r-list)" */.    
11b70 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
11b80 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
11b90 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
11ba0 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
11bb0 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78  lect>)" */.  } x
11bc0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
11bd0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
11be0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11bf0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11c00 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11c10 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11c20 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11c30 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11c40 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11c50 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11c60 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11c70 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11c80 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
11c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11cd0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
11ce0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
11cf0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
11d00 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
11d10 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
11d20 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
11d30 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
11d40 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
11d50 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
11d60 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
11d70 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
11d80 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
11db0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
11dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11dd0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11de0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
11df0 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20  w, 0 -> old */. 
11e00 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
11e10 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11e20 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
11e30 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
11e40 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
11e50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11e60 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
11e70 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
11e80 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
11e90 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
11ea0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11eb0 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
11ec0 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
11ed0 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
11ee0 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
11ef0 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
11f00 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
11f10 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
11f20 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32  n */.  u8 flags2
11f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11f40 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66   Second set of f
11f50 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a  lags.  EP2_... *
11f60 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
11f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11f80 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
11f90 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
11fa0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11fc0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
11fd0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
11fe0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
12010 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
12020 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
12030 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
12040 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
12050 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
12060 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
12070 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
12080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
12090 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
120a0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
120b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
120c0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
120d0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
120e0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
120f0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
12100 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
12110 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
12120 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
12130 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
12140 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
12150 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
12160 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
12170 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
12180 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
12190 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
121a0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
121b0 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
121c0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
121d0 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
121e0 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
121f0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
12200 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
12210 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
12220 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
12230 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
12240 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
12250 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
12260 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
12270 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
12280 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
12290 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
122a0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
122b0 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
122c0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
122d0 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
122e0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
122f0 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
12300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12310 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
12320 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
12330 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
12340 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
12350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
12360 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30 30  ollate    0x0100
12370 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69    /* Tree contai
12380 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
12390 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66  opeartor */.#def
123a0 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74  ine EP_FixedDest
123b0 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73    0x0200  /* Res
123c0 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20  ult needed in a 
123d0 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65  specific registe
123e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
123f0 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30  IntValue   0x040
12400 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  0  /* Integer va
12410 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12420 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
12430 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
12440 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e  t  0x0800  /* x.
12450 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
12460 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
12470 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
12480 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20  ne EP_Hint      
12490 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20   0x1000  /* Not 
124a0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
124b0 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
124c0 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  2000  /* Expr st
124d0 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45 44  ruct is EXPR_RED
124e0 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
124f0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
12500 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34  P_TokenOnly  0x4
12510 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72  000  /* Expr str
12520 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45  uct is EXPR_TOKE
12530 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
12540 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
12550 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30 78  EP_Static     0x
12560 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e  8000  /* Held in
12570 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
12580 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
12590 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  () */../*.** The
125a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
125b0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
125c0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
125d0 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f  flags2 field..*/
125e0 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c  .#define EP2_Mal
125f0 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30  locedToken  0x00
12600 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  01  /* Need to s
12610 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12620 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
12630 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75  efine EP2_Irredu
12640 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32 20  cible    0x0002 
12650 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
12660 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
12670 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  xpr */../*.** Th
12680 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65  e pseudo-routine
12690 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 49   sqlite3ExprSetI
126a0 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73 20  rreducible sets 
126b0 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  the EP2_Irreduci
126c0 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61  ble.** flag on a
126d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  n expression str
126e0 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c  ucture.  This fl
126f0 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ag is used for V
12700 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a  V&A only.  The.*
12710 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  * routine is imp
12720 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61  lemented as a ma
12730 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f  cro that only wo
12740 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75  rks when in debu
12750 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73  gging mode,.** s
12760 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64  o as not to burd
12770 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f  en production co
12780 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  de..*/.#ifdef SQ
12790 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
127a0 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
127b0 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e  ucible(X)  (X)->
127c0 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72  flags2 |= EP2_Ir
127d0 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a  reducible.#else.
127e0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
127f0 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23  Irreducible(X).#
12800 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
12810 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12820 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12830 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
12840 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
12850 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
12860 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
12870 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
12880 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
12890 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
128a0 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f  ne ExprHasAnyPro
128b0 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
128c0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
128d0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
128e0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
128f0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12900 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12910 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12920 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12930 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ~(P)../*.** Macr
12940 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
12950 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
12960 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
12970 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
12980 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
12990 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
129a0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
129b0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
129c0 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
129d0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
129e0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
129f0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
12a00 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
12a10 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
12a20 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
12a30 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
12a40 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
12a50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
12a60 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
12a70 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
12a80 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
12a90 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
12aa0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
12ab0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12ac0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
12ad0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
12ae0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
12af0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
12b00 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
12b10 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
12b20 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
12b30 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
12b40 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
12b50 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
12b60 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
12b70 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
12b80 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
12b90 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
12ba0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
12bb0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
12bc0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
12bd0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
12be0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
12bf0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
12c00 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
12c10 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
12c20 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
12c30 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
12c40 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
12c50 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
12c60 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
12c70 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
12c80 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
12c90 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
12ca0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12cb0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
12cc0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12cd0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
12ce0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
12cf0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
12d00 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
12d10 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
12d20 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
12d30 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
12d40 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
12d50 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
12d60 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
12d70 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
12d80 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
12d90 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
12da0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
12db0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
12dc0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
12dd0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
12de0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
12df0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
12e00 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
12e10 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
12e20 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
12e30 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
12e40 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
12e50 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
12e60 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
12e70 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
12e80 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
12e90 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
12ea0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
12eb0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
12ec0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
12ed0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
12ee0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
12ef0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
12f00 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
12f10 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
12f20 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12f30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
12f40 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
12f50 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
12f60 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
12f70 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
12f80 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12f90 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
12fa0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
12fb0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
12fc0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
12fd0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
12fe0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
12ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13000 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
13010 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
13020 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13030 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
13040 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13050 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
13060 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
13070 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
13080 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
13090 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
130a0 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
130b0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
130c0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
130d0 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
130e0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
130f0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
13100 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
13110 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
13120 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
13130 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
13140 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
13150 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
13160 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
13170 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
13180 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
13190 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
131a0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
131b0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
131c0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
131d0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
131e0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
131f0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13200 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13210 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13220 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13230 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
13240 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
13250 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13260 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
13270 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
13280 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
13290 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
132a0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
132b0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
132c0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
132d0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
132e0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
132f0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13300 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13310 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13320 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13330 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
13340 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
13350 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
13360 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
13370 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
13380 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
13390 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
133a0 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
133b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
133c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
133d0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
133e0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
133f0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13400 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13410 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13420 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13430 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
13440 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
13450 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13460 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
13470 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
13480 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
13490 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
134a0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
134b0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
134c0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
134d0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
134e0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
134f0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13500 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13510 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13520 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13530 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
13540 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
13550 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13560 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
13570 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
13580 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
13590 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
135a0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
135b0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
135c0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
135d0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
135e0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
135f0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13600 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13610 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13620 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
13630 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
13640 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
13650 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
13660 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
13670 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
13680 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
13690 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
136a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
136b0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
136c0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
136d0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
136e0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
136f0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
13700 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
13710 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
13720 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
13730 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
13740 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
13750 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
13760 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
13770 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
13780 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
13790 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
137a0 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
137b0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
137c0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
137d0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
137e0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
137f0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
13800 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
13810 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
13820 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
13830 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
13840 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
13850 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
13860 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
13870 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
13880 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
13890 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
138a0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
138b0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
138c0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
138d0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
138e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
138f0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13900 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13910 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13920 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13930 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
13940 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
13950 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13960 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13970 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13980 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13990 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
139a0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
139b0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
139c0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
139d0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
139e0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
139f0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13a00 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13a10 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13a20 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13a30 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
13a40 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
13a50 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13a60 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13a70 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13a80 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13a90 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13aa0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13ab0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13ac0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13ad0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13ae0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13af0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13b00 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13b10 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13b20 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13b30 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
13b40 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
13b50 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13b60 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13b70 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13b80 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13b90 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13ba0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13bb0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13bc0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13bd0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13be0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13bf0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13c00 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13c10 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13c20 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13c30 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13c40 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13c50 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13c60 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13c70 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13c80 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13c90 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
13ca0 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
13cb0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
13cc0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
13cd0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13ce0 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
13cf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13d00 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13d10 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13d20 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13d30 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13d40 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13d50 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13d60 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13d70 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13d80 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13d90 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13da0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13db0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13dc0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13dd0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13de0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13df0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13e00 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13e10 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13e20 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13e30 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13e40 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13e50 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13e60 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13e70 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13e80 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13e90 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13ea0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13eb0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13ec0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13ed0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13ee0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13ef0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13f00 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13f10 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13f20 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13f30 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13f40 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13f50 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13f60 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13f70 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13f80 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13f90 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13fa0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13fb0 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13fc0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13fd0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13fe0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13ff0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
14000 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
14010 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
14020 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
14030 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
14040 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
14050 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
14060 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
14070 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
14080 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
14090 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
140a0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
140b0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
140c0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
140d0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
140e0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
140f0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
14100 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
14110 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
14120 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
14130 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
14140 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
14150 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
14160 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
14170 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
14180 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
14190 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
141a0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
141b0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
141c0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
141d0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
141e0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
141f0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14200 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14210 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14220 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14230 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
14240 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
14250 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
14260 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
14270 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
14280 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
14290 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
142a0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
142b0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
142c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
142d0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
142e0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
142f0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14300 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14310 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14320 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14330 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
14340 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
14350 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
14360 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
14370 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
14380 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
14390 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
143a0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
143b0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
143c0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
143d0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
143e0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
143f0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14400 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14410 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14420 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14430 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14440 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
14450 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
14460 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
14470 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
14480 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
14490 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
144a0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
144b0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
144c0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
144d0 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
144e0 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
144f0 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14500 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14510 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14520 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14530 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
14540 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14550 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
14560 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
14570 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
14580 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
14590 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
145a0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
145b0 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
145c0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
145d0 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
145e0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
145f0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14600 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14610 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
14620 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
14630 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
14640 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
14650 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
14660 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
14670 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
14680 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
14690 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
146a0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
146b0 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
146c0 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
146d0 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
146e0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
146f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
14700 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
14710 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
14720 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
14730 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
14740 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
14750 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
14760 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
14770 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
14780 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
14790 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
147a0 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
147b0 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
147c0 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
147d0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
147e0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
147f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
14800 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
14810 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
14820 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14830 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
14840 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
14850 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
14860 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
14870 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14880 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
14890 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
148a0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
148b0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a  be distinct */..
148c0 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
148d0 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
148e0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
148f0 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
14900 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
14910 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
14920 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
14930 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
14940 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
14950 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
14960 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
14970 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
14980 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
14990 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
149a0 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
149b0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
149c0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
149d0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
149e0 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
149f0 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
14a00 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
14a10 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
14a20 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
14a30 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
14a40 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
14a50 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
14a60 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
14a70 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
14a80 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
14a90 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
14aa0 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
14ab0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
14ac0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
14ad0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
14ae0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
14af0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
14b00 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
14b10 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
14b20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
14b30 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
14b40 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
14b50 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
14b60 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
14b70 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
14b80 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
14b90 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
14ba0 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
14bb0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
14bc0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
14bd0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
14be0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
14bf0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
14c00 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
14c10 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
14c20 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
14c30 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
14c40 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
14c50 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
14c60 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
14c70 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
14c80 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
14c90 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
14ca0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
14cb0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
14cc0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
14cd0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
14ce0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
14cf0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
14d00 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
14d10 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
14d20 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
14d30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
14d40 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
14d50 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
14d60 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
14d70 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
14d80 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
14d90 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
14da0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14db0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
14dc0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
14dd0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
14de0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
14df0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
14e00 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
14e10 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
14e20 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
14e30 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
14e40 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
14e50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
14e60 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
14e70 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
14e80 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
14e90 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
14ea0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
14eb0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
14ec0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
14ed0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
14ee0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
14ef0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
14f00 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
14f10 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  ions */.  AggInf
14f20 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
14f30 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
14f40 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
14f50 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
14f60 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
14f70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
14f80 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
14f90 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
14fa0 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
14fb0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
14fc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
14fd0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
14fe0 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
14ff0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
15000 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15010 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
15020 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
15030 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
15040 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
15050 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
15060 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
15070 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
15080 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
15090 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
150a0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
150b0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
150c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
150d0 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
150e0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
150f0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
15100 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
15110 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
15120 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
15130 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
15140 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
15150 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
15160 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
15170 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
15180 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
15190 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
151a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
151b0 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
151c0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
151d0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
151e0 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
151f0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 73 4d  /.#define NC_AsM
15200 61 79 62 65 20 20 20 30 78 31 30 20 20 20 20 2f  aybe   0x10    /
15210 2a 20 52 65 73 6f 6c 76 65 20 74 6f 20 41 53 20  * Resolve to AS 
15220 74 65 72 6d 73 20 6f 66 20 74 68 65 20 72 65 73  terms of the res
15230 75 6c 74 20 73 65 74 20 6f 6e 6c 79 0a 20 20 20  ult set only.   
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 66 20            ** if 
15260 6e 6f 20 6f 74 68 65 72 20 72 65 73 6f 6c 75 74  no other resolut
15270 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
15280 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
15290 61 72 74 49 64 78 20 20 20 30 78 32 30 20 20 20  artIdx   0x20   
152a0 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
152b0 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
152c0 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a  index WHERE */..
152d0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
152e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
152f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
15300 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
15310 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
15320 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
15330 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
15340 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
15350 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
15360 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
15370 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
15380 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
15390 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
153a0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
153b0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
153c0 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
153d0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
153e0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
153f0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
15400 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
15410 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
15420 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
15430 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
15440 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
15450 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
15460 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
15470 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
15480 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
15490 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
154a0 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
154b0 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
154c0 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
154d0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
154e0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
154f0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
15500 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
15510 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
15520 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
15530 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
15540 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
15550 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
15560 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
15570 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
15580 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
15590 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
155a0 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
155b0 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
155c0 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
155d0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
155e0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
155f0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
15600 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
15610 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
15620 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
15630 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
15640 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
15650 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
15660 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
15670 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
15680 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
15690 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
156a0 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
156b0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
156c0 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
156d0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
156e0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
156f0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
15700 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
15710 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
15720 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
15730 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
15740 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
15750 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
15760 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
15770 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
15780 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
15790 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
157a0 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
157b0 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
157c0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
157d0 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
157e0 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
157f0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
15800 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
15810 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  ounters */.  int
15820 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d   addrOpenEphm[3]
15830 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
15840 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
15850 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
15860 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c  ct */.  u64 nSel
15870 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f  ectRow;        /
15880 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
15890 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
158a0 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
158b0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
158c0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
158d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
158e0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
158f0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
15900 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15910 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
15920 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
15930 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
15940 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
15950 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
15960 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
15970 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
15980 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
15990 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
159a0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
159b0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
159c0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
159d0 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
159e0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
159f0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
15a00 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
15a10 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
15a20 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c  ompound */.  Sel
15a30 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b  ect *pRightmost;
15a40 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73      /* Right-mos
15a50 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  t select in a co
15a60 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
15a70 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70  atement */.  Exp
15a80 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
15a90 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
15aa0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
15ab0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
15ac0 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
15ad0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
15ae0 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
15af0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
15b00 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  sed. */.};../*.*
15b10 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
15b20 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
15b30 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
15b40 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
15b50 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
15b60 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
15b70 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
15b80 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
15b90 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
15ba0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
15bb0 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
15bc0 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
15bd0 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
15be0 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
15bf0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
15c00 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
15c10 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
15c20 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
15c30 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
15c40 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
15c50 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
15c60 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
15c70 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
15c80 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
15c90 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
15ca0 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
15cb0 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
15cc0 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
15cd0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
15ce0 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
15cf0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
15d00 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
15d10 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
15d20 65 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20  e SF_UseSorter  
15d30 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
15d40 53 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72  Sort using a sor
15d50 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ter */.#define S
15d60 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
15d70 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
15d80 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
15d90 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
15da0 64 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69  define SF_Materi
15db0 61 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30  alize     0x0100
15dc0 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72    /* Force mater
15dd0 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69  ialization of vi
15de0 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ews */.#define S
15df0 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
15e00 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72    0x0200  /* Par
15e10 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
15e20 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
15e30 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
15e40 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c  results of a sel
15e50 65 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72  ect can be distr
15e60 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
15e70 6c 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20  l ways.  The.** 
15e80 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
15e90 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
15ea0 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66  t Type"..*/.#def
15eb0 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
15ec0 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
15ed0 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
15ee0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
15ef0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
15f00 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
15f10 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
15f20 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
15f30 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
15f40 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
15f50 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
15f60 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
15f70 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
15f80 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
15f90 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
15fa0 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
15fb0 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68  ywhere */../* Th
15fc0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
15fd0 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
15fe0 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
15ff0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
16000 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
16010 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
16020 54 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66  T_Discard)..#def
16030 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
16040 20 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75       5  /* Outpu
16050 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
16060 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
16070 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
16080 20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   6  /* Store res
16090 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
160a0 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
160b0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
160c0 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
160d0 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
160e0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
160f0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
16100 20 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65       8  /* Store
16110 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
16120 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
16130 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
16140 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
16150 20 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65      9  /* Create
16160 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
16170 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
16180 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
16190 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
161a0 20 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61     10  /* Genera
161b0 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
161c0 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a  of result */../*
161d0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
161e0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
161f0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
16200 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
16210 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
16220 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
16230 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
16240 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
16250 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77  ;         /* How
16260 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
16270 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
16280 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
16290 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
162a0 74 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  t;     /* Affini
162b0 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
162c0 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
162d0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
162e0 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
162f0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
16300 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
16310 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
16320 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61  st;        /* Ba
16330 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
16340 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
16350 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
16360 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
16370 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
16380 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
16390 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
163a0 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
163b0 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
163c0 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
163d0 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
163e0 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  NT .** tables, t
163f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
16400 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
16410 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
16420 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
16430 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
16440 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
16450 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
16460 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
16470 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
16480 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
16490 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
164a0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
164b0 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
164c0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
164d0 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
164e0 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74  re down within t
164f0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
16500 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
16510 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
16520 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
16530 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
16540 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
16550 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
16560 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
16570 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
16580 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
16590 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
165a0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
165b0 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
165c0 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
165d0 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
165e0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
165f0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
16600 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
16610 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
16620 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
16630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
16640 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
16650 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
16660 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
16670 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
16680 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
16690 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
166a0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
166b0 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
166c0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
166d0 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
166e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
166f0 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
16700 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
16710 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
16720 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
16730 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
16740 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16750 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
16760 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69  for each .** tri
16770 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
16780 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
16790 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
167a0 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
167b0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
167c0 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
167d0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
167e0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
167f0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
16800 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
16810 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
16820 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
16830 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
16840 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
16850 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
16860 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
16870 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
16880 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
16890 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
168a0 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
168b0 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
168c0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
168d0 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
168e0 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
168f0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
16900 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
16910 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
16920 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
16930 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
16940 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
16950 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
16960 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
16970 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
16980 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
16990 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
169a0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
169b0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
169c0 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
169d0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
169e0 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
169f0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
16a00 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
16a10 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73   of INSERT .** s
16a20 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
16a30 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
16a40 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
16a50 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
16a60 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
16a70 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
16a80 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
16a90 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
16aa0 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
16ab0 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
16ac0 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
16ad0 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
16ae0 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
16af0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
16b00 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
16b10 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
16b20 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
16b30 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
16b40 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
16b50 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
16b60 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
16b70 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
16b80 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
16b90 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
16ba0 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
16bb0 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
16bc0 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
16bd0 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
16be0 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
16bf0 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
16c00 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
16c10 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
16c20 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
16c30 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
16c40 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
16c50 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
16c60 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71  >30.  typedef sq
16c70 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62  lite3_uint64 yDb
16c80 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79  Mask;.#else.  ty
16c90 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
16ca0 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64  nt yDbMask;.#end
16cb0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
16cc0 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
16cd0 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
16ce0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
16cf0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
16d00 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
16d10 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
16d20 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
16d30 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
16d40 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
16d50 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
16d60 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
16d70 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
16d80 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
16d90 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
16da0 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
16db0 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
16dc0 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
16dd0 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
16de0 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
16df0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
16e00 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
16e10 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
16e20 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
16e30 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
16e40 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
16e50 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
16e60 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
16e70 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
16e80 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
16e90 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
16ea0 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
16eb0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
16ec0 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
16ed0 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
16ee0 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
16ef0 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
16f00 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
16f10 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
16f20 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
16f30 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
16f40 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
16f50 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
16f60 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
16f70 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
16f80 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
16f90 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
16fa0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
16fb0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
16fc0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
16fd0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
16fe0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
16ff0 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
17000 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
17010 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
17020 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
17030 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
17040 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
17050 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
17060 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
17070 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
17080 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
17090 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
170a0 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
170b0 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
170c0 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
170d0 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
170e0 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
170f0 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
17100 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
17110 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
17120 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
17130 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
17140 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17150 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
17160 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
17170 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
17180 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
17190 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
171a0 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
171b0 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
171c0 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e  pReg[] */.  u8 n
171d0 54 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20  TempInUse;      
171e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54   /* Number of aT
171f0 65 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74  empReg[] current
17200 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
17210 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
17220 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
17230 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
17240 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
17250 20 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20    u8 iColCache; 
17260 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65         /* Next e
17270 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68  ntry in aColCach
17280 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a  e[] to replace *
17290 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
172a0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
172b0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
172c0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
172d0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
172e0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
172f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
17300 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
17310 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
17320 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69  exception */.  i
17330 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
17340 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
17350 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
17360 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
17370 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
17380 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
17390 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
173a0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
173b0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
173c0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
173d0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
173e0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
173f0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
17400 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
17410 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
17420 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
17430 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
17440 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17450 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
17460 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
17470 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
17480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17490 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
174a0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
174b0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
174c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
174d0 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
174e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
174f0 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
17500 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17510 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
17520 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
17530 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
17540 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
17550 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
17560 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
17570 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
17580 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20  t iPartIdxTab;  
17590 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72     /* Table corr
175a0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70  esponding to a p
175b0 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a  artial index */.
175c0 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
175d0 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
175e0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
175f0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
17600 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
17610 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
17620 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
17630 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
17640 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
17650 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
17660 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
17670 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
17680 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
17690 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
176a0 62 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ber */.    int i
176b0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
176c0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
176d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
176e0 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
176f0 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
17700 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
17710 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
17720 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
17730 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
17740 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
17750 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
17760 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
17770 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
17780 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
17790 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
177a0 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
177b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
177c0 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
177d0 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
177e0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
177f0 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
17800 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
17810 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
17820 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
17830 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
17840 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
17850 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
17860 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
17870 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
17880 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
17890 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
178a0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
178b0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
178c0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
178d0 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20   cookieGoto;    
178e0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
178f0 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69  OP_Goto to cooki
17900 65 20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f  e verifier subro
17910 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63  utine */.  int c
17920 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54  ookieValue[SQLIT
17930 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32  E_MAX_ATTACHED+2
17940 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66  ];  /* Values of
17950 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69   cookies to veri
17960 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  fy */.  int regR
17970 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
17980 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
17990 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
179a0 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
179b0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
179c0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
179d0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
179e0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
179f0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
17a00 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
17a10 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
17a20 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
17a30 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
17a40 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f  -program */.  To
17a50 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
17a60 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
17a70 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
17a80 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
17a90 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
17aa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
17ab0 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
17ac0 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
17ad0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
17ae0 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
17af0 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
17b00 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
17b10 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
17b20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
17b30 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
17b40 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
17b50 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
17b60 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
17b70 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
17b80 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f  counters */..  /
17b90 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
17ba0 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20  ed while coding 
17bb0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
17bc0 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  . */.  Parse *pT
17bd0 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
17be0 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
17bf0 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
17c00 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
17c10 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
17c20 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
17c30 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
17c40 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75  coded for */.  u
17c50 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
17c60 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
17c70 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
17c80 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
17c90 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
17ca0 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
17cb0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
17cc0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
17cd0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
17ce0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
17cf0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
17d00 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
17d10 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
17d20 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
17d30 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
17d40 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
17d50 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
17d60 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
17d70 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
17d80 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
17d90 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
17da0 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
17db0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
17dc0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
17dd0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76  rs */..  /* Abov
17de0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
17df0 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
17e00 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
17e10 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
17e20 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
17e30 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74  ursion */..  int
17e40 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
17e50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17e60 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
17e70 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
17e80 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  L so far */.  in
17e90 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20  t nzVar;        
17ea0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17eb0 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73  r of available s
17ec0 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20  lots in azVar[] 
17ed0 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17ef0 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
17f00 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
17f10 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
17f20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
17f30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
17f40 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
17f50 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
17f60 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
17f70 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
17f80 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
17f90 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
17fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17fb0 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
17fc0 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
17fd0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
17fe0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
17ff0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18000 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
18010 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
18020 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
18030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
18040 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
18050 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
18060 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
18070 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18080 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
18090 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
180a0 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
180b0 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
180c0 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
180d0 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
180e0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
180f0 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
18100 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
18110 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
18120 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
18130 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
18140 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
18150 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
18160 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
18170 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
18180 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
18190 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
181a0 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
181b0 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69  ) */.  int *aAli
181c0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  as;             
181d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65   /* Register use
181e0 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65  d to hold aliase
181f0 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f  d result */.  co
18200 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
18210 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
18220 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
18230 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
18240 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
18250 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
18260 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
18270 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
18280 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
18290 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
182a0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
182b0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
182c0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
182d0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
182e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
182f0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
18300 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
18310 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
18320 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
18330 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
18340 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
18350 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
18360 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
18370 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
18380 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
18390 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
183a0 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
183b0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
183c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
183d0 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
183e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
183f0 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
18400 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
18410 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
18420 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
18430 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
18440 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
18450 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
18460 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
18470 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
18480 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
18490 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
184a0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
184b0 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
184c0 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
184d0 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
184e0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
184f0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a   triggers */.};.
18500 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
18510 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
18520 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
18530 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
18540 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
18550 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
18560 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
18570 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
18580 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
18590 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
185a0 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
185b0 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
185c0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
185d0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
185e0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
185f0 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
18600 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
18610 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
18620 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
18630 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
18640 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
18650 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
18660 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
18670 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
18680 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
18690 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
186a0 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
186b0 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
186c0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
186d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
186e0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
186f0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
18700 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
18710 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
18720 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
18730 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18740 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
18750 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
18760 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
18770 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
18780 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
18790 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
187a0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
187b0 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
187c0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
187d0 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
187e0 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
187f0 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
18800 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
18810 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
18820 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
18830 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
18840 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
18850 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18860 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
18870 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
18880 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
18890 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
188a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
188b0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
188c0 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
188d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
188e0 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
188f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18900 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
18910 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
18920 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
18930 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
18940 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
18950 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
18960 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
18970 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
18980 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
18990 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
189a0 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
189b0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
189c0 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
189d0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
189e0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
189f0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
18a00 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
18a10 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
18a20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
18a30 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
18a40 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
18a50 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
18a60 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
18a70 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
18a80 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
18a90 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
18aa0 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
18ab0 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
18ac0 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
18ad0 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
18ae0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
18af0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
18b00 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
18b10 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
18b20 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
18b30 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
18b40 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
18b50 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
18b60 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
18b70 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
18b80 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
18b90 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
18ba0 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
18bb0 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
18bc0 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
18bd0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
18be0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
18bf0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
18c00 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
18c10 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
18c20 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
18c30 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
18c40 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
18c50 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
18c60 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
18c70 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
18c80 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
18c90 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
18ca0 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
18cb0 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
18cc0 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
18cd0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
18ce0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
18cf0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
18d00 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
18d10 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
18d20 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
18d30 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
18d40 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
18d50 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
18d60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
18d70 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
18d80 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
18d90 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
18da0 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
18db0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
18dc0 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
18dd0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
18de0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
18df0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18e00 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
18e10 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
18e20 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
18e30 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
18e40 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
18e50 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
18e60 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
18e70 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
18e80 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
18e90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18ea0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
18eb0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
18ec0 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
18ed0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
18ee0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
18ef0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
18f00 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
18f10 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
18f40 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
18f50 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
18f60 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
18f70 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
18f80 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
18f90 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
18fa0 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
18fb0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
18fc0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
18fd0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
18fe0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
18ff0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
19000 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
19010 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
19020 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
19030 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
19040 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
19050 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
19060 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
19070 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
19080 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
19090 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
190a0 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
190b0 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
190c0 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
190d0 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
190e0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
190f0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
19100 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
19110 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
19120 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
19130 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
19140 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
19150 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
19160 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
19170 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
19180 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
19190 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
191a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
191b0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
191c0 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
191d0 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
191e0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
191f0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
19200 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
19210 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
19220 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
19230 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
19240 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
19250 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
19260 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
19270 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
19280 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
19290 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
192a0 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
192b0 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
192c0 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
192d0 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
192e0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
192f0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
19300 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
19310 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
19320 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
19330 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
19340 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
19350 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
19360 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
19370 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
19380 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
19390 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
193a0 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
193b0 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
193c0 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
193d0 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
193e0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
193f0 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
19400 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
19410 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
19420 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
19430 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
19440 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
19450 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
19460 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
19470 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
19480 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
19490 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
194a0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
194b0 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
194c0 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
194d0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
194e0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
194f0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
19500 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
19510 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
19520 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
19530 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
19540 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
19550 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19570 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
19580 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
19590 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
195a0 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
195b0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
195c0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
195d0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
195e0 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
195f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
19600 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
19610 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
19620 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
19640 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
19650 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
19660 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
19670 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
19680 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
19690 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
196a0 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
196b0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
196c0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
196d0 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
196e0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
196f0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
19700 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19710 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19720 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
19730 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
19740 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
19750 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
19760 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
19770 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
19780 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
19790 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
197a0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
197b0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
197c0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
197d0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
197e0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
197f0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
19800 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
19810 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
19820 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
19830 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
19840 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
19850 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
19860 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
19870 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
19880 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
198a0 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
198b0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
198c0 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
198d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
198e0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
198f0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
19900 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
19910 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
19920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
19930 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
19940 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
19950 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
19960 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
19970 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
19980 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
19990 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
199a0 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
199b0 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
199c0 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
199d0 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
199e0 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
199f0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
19a00 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
19a10 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
19a20 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
19a30 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
19a40 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
19a50 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
19a60 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
19a70 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
19a80 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
19a90 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63  PDATE.  VALUES c
19aa0 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54  lause for INSERT
19ab0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
19ac0 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
19ad0 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
19ae0 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
19af0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
19b00 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
19b10 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
19b20 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
19b30 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
19b40 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
19b50 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
19b60 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
19b70 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19b80 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
19b90 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
19ba0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
19bb0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
19bc0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
19bd0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
19be0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
19bf0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
19c00 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
19c10 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
19c20 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
19c30 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
19c40 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
19c50 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
19c60 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
19c70 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
19c80 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
19c90 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
19ca0 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
19cb0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
19cc0 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ma */.  const ch
19cd0 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
19ce0 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
19cf0 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
19d00 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
19d10 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
19d20 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
19d30 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
19d40 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
19d50 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
19d60 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
19d70 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
19d80 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
19d90 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
19da0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
19db0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
19dc0 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
19dd0 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
19de0 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
19df0 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
19e00 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
19e10 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
19e20 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
19e30 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
19e40 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
19e50 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
19e60 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
19e70 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
19e80 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
19e90 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
19ea0 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
19eb0 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
19ec0 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
19ed0 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
19ee0 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
19ef0 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
19f00 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
19f10 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
19f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
19f30 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
19f40 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
19f50 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
19f60 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
19f70 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
19f80 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
19f90 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
19fa0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
19fb0 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
19fc0 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61  gth */.  u8   ma
19fd0 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a  llocFailed;   /*
19fe0 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66   Becomes true if
19ff0 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   any memory allo
1a000 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a  cation fails */.
1a010 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63    u8   useMalloc
1a020 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e  ;      /* 0: non
1a030 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62  e,  1: sqlite3Db
1a040 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69  Malloc,  2: sqli
1a050 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20  te3_malloc */.  
1a060 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20  u8   tooBig;    
1a070 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20       /* Becomes 
1a080 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73  true if string s
1a090 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69  ize exceeds limi
1a0a0 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ts */.};../*.** 
1a0b0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1a0c0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1a0d0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1a0e0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1a0f0 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1a100 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1a110 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1a120 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1a130 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1a140 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1a150 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1a160 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1a170 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1a180 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1a190 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1a1a0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1a1b0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1a1c0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1a1d0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1a1e0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1a1f0 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1a200 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1a210 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a220 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1a230 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1a240 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1a250 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1a260 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1a270 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1a280 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1a290 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1a2a0 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1a2b0 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1a2c0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1a2d0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1a2e0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1a2f0 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a310 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1a320 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1a330 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1a340 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1a350 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1a360 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1a370 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1a380 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a3a0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1a3b0 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1a3c0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1a3f0 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1a400 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1a410 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1a440 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1a450 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1a460 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1a490 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1a4a0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1a4d0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1a4e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1a4f0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1a500 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1a510 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1a520 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1a530 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1a540 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1a550 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1a560 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1a570 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1a580 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1a590 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1a5a0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1a5b0 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1a5c0 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1a5d0 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1a5e0 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1a5f0 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1a600 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1a610 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a630 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1a640 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1a650 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1a660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1a670 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1a680 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1a690 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1a6a0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1a6b0 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1a6c0 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
1a6d0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
1a6e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
1a6f0 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
1a700 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
1a710 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1a720 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
1a730 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
1a740 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
1a750 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1a760 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1a770 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1a780 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1a790 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1a7c0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1a7d0 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1a7e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a7f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a800 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1a810 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1a820 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1a830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1a840 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1a850 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1a880 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1a890 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1a8a0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a8c0 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1a8d0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1a8e0 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1a8f0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1a900 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1a910 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1a920 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1a930 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1a940 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1a950 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1a960 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1a970 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ed */.  /* The a
1a980 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1a990 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1a9a0 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1a9b0 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1a9c0 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1a9d0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1a9e0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1a9f0 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aa10 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1aa20 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1aa30 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1aa40 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aa60 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1aa70 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1aa80 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1aa90 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aab0 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1aac0 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1aad0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1aae0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1aaf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ab00 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1ab10 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1ab20 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1ab30 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1ab40 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1ab50 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1ab60 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73  itialized */.  s
1ab70 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
1ab80 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1ab90 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
1aba0 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
1abb0 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lize() */.  int 
1abc0 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1abe0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
1abf0 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
1ac00 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1ac10 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1ac20 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1ac30 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1ac40 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1ac50 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1ac60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1ac70 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1ac80 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xLog() */.  int 
1ac90 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1acb0 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
1acc0 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
1acd0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1ace0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1acf0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1ad00 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1ad10 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1ad20 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1ad30 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a  gArg;.#endif.};.
1ad40 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1ad50 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1ad60 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1ad70 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1ad80 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1ad90 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1ada0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1adb0 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1adc0 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1add0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1ade0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1adf0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1ae00 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1ae10 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1ae20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1ae50 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1ae60 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1ae70 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ae90 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1aea0 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 62 53  eries */.  u8 bS
1aeb0 65 6c 65 63 74 44 65 70 74 68 46 69 72 73 74 3b  electDepthFirst;
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62 71 75       /* Do subqu
1aee0 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f 0a 20  eries first */. 
1aef0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1af20 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
1af30 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
1af40 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
1af70 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
1af80 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1afb0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a  nteger value */.
1afc0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1afd0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aff0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1b000 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1b010 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1b040 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1b050 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1b060 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1b070 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1b080 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1b090 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1b0a0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1b0b0 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1b0c0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1b0d0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1b0e0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1b0f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1b100 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1b110 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1b120 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1b130 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1b140 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1b150 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1b160 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1b170 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1b180 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1b190 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1b1a0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1b1b0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1b1c0 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1b1d0 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1b1e0 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1b1f0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1b200 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1b210 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1b220 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1b230 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1b240 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1b250 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1b260 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  k */../*.** Assu
1b270 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
1b280 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1b290 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
1b2a0 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
1b2b0 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
1b2c0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1b2d0 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
1b2e0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
1b2f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
1b300 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
1b310 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1b320 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
1b330 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
1b340 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
1b370 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
1b380 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
1b390 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
1b3e0 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
1b3f0 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
1b400 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
1b410 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
1b420 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
1b430 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
1b440 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
1b450 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
1b460 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
1b470 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
1b480 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
1b490 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
1b4a0 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
1b4b0 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
1b4c0 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
1b4d0 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
1b4e0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
1b4f0 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
1b500 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
1b510 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1b520 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
1b530 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
1b540 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
1b550 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
1b560 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
1b570 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
1b580 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
1b590 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
1b5a0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
1b5b0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
1b5c0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
1b5d0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
1b5e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1b5f0 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
1b600 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1b610 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
1b620 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
1b630 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
1b640 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
1b650 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
1b660 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
1b670 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
1b680 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
1b690 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
1b6a0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49   all.** the SQLI
1b6b0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
1b6c0 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
1b6d0 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53   an alisse for S
1b6e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1b6f0 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
1b700 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1b710 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
1b720 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1b730 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
1b740 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1b750 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  3.#endif../*.** 
1b760 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
1b770 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
1b780 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
1b790 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
1b7a0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
1b7b0 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
1b7c0 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
1b7d0 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
1b7e0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1b7f0 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
1b800 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
1b810 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1b820 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1b830 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
1b840 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
1b850 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
1b860 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1b870 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
1b880 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
1b890 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
1b8a0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
1b8b0 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
1b8c0 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
1b8d0 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
1b8e0 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
1b8f0 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
1b900 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
1b910 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
1b920 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
1b930 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
1b940 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
1b950 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1b960 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
1b970 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1b980 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1b990 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
1b9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1b9b0 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
1b9c0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1b9d0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1b9e0 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
1b9f0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1ba00 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1ba10 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1ba20 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
1ba30 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1ba40 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
1ba50 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1ba60 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1ba70 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
1ba80 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
1ba90 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1baa0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1bab0 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
1bac0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1bad0 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
1bae0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1baf0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1bb00 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
1bb10 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
1bb20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
1bb30 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
1bb40 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
1bb50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bb60 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
1bb70 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
1bb80 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1bb90 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1bba0 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
1bbb0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1bbc0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1bbd0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
1bbe0 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
1bbf0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1bc00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1bc10 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
1bc20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1bc30 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1bc40 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1bc50 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
1bc60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1bc70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1bc80 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
1bc90 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1bca0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1bcb0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1bcc0 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
1bcd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1bce0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
1bcf0 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
1bd00 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23   prototypes.*/.#
1bd10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1bd20 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  rICmp sqlite3_st
1bd30 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65  ricmp.int sqlite
1bd40 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
1bd50 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
1bd60 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
1bd70 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
1bd80 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
1bd90 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
1bda0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
1bdb0 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
1bdc0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
1bdd0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1bde0 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e  te3MallocZero(in
1bdf0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1be00 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
1be10 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f  lite3*, int);.vo
1be20 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
1be30 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
1be40 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c   int);.char *sql
1be50 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
1be60 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1be70 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
1be80 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
1be90 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1bea0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1beb0 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
1bec0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1bed0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
1bee0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
1bef0 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76   void *, int);.v
1bf00 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
1bf10 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
1bf20 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76   void *, int);.v
1bf30 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
1bf40 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
1bf50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
1bf60 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
1bf70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
1bf80 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
1bf90 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
1bfa0 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
1bfb0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1bfc0 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
1bfd0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
1bfe0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
1bff0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1c000 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
1c010 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
1c020 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
1c030 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
1c040 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
1c050 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
1c060 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
1c070 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69  void));.int sqli
1c080 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
1c090 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
1c0a0 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
1c0b0 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
1c0c0 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
1c0d0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
1c0e0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
1c0f0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
1c100 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
1c110 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
1c120 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
1c130 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
1c140 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
1c150 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
1c160 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
1c170 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
1c180 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
1c190 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
1c1a0 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
1c1b0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
1c1c0 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
1c1d0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
1c1e0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
1c1f0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
1c200 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1c210 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
1c220 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
1c230 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1c240 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
1c250 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
1c260 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1c270 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
1c280 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23  )       .#else.#
1c290 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1c2a0 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
1c2b0 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
1c2c0 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
1c2d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c2e0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
1c2f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1c300 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
1c310 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1c320 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
1c330 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
1c340 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
1c350 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
1c360 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
1c370 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1c380 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
1c390 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
1c3a0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1c3b0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
1c3c0 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  5.const sqlite3_
1c3d0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
1c3e0 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
1c3f0 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  5(void);.#endif.
1c400 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1c410 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
1c420 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1c430 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
1c440 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
1c450 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
1c460 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
1c470 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
1c480 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1c490 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
1c4a0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
1c4b0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
1c4c0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
1c4d0 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
1c4e0 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
1c4f0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1c500 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
1c510 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1c520 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c  e3StatusAdd(int,
1c530 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1c540 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74  te3StatusSet(int
1c550 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66  , int);..#ifndef
1c560 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
1c570 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
1c580 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64  t sqlite3IsNaN(d
1c590 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20  ouble);.#else.# 
1c5a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c5b0 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
1c5c0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
1c5d0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
1c5e0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1c5f0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69  r*, va_list);.#i
1c600 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c610 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71 6c  T_TRACE.void sql
1c620 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
1c630 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
1c640 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
1c650 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
1c660 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
1c670 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1c680 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
1c690 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1c6a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
1c6b0 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71  _list);.char *sq
1c6c0 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71  lite3MAppendf(sq
1c6d0 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e  lite3*,char*,con
1c6e0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
1c6f0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1c700 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e  E_TEST) || defin
1c710 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
1c720 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1c730 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
1c740 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1c750 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1c760 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
1c770 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
1c780 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
1c790 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
1c7a0 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d 61  ./* Output forma
1c7b0 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54 45  tting for SQLITE
1c7c0 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41 49  _TESTCTRL_EXPLAI
1c7d0 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  N */.#if defined
1c7e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54  (SQLITE_ENABLE_T
1c7f0 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76  REE_EXPLAIN).  v
1c800 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c810 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a  inBegin(Vdbe*);.
1c820 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1c830 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62 65  plainPrintf(Vdbe
1c840 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1c850 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ...);.  void sql
1c860 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64  ite3ExplainNL(Vd
1c870 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1c880 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68 28  ite3ExplainPush(
1c890 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1c8a0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f 70  qlite3ExplainPop
1c8b0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1c8c0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
1c8d0 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  nish(Vdbe*);.  v
1c8e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c8f0 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c 20  inSelect(Vdbe*, 
1c900 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
1c910 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1c920 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72 2a  xpr(Vdbe*, Expr*
1c930 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1c940 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
1c950 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73 74  (Vdbe*, ExprList
1c960 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *);.  const char
1c970 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78 70   *sqlite3VdbeExp
1c980 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b  lanation(Vdbe*);
1c990 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1c9a0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
1c9b0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
1c9c0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
1c9d0 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66 69  lect(A,B).# defi
1c9e0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1c9f0 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65 66  nExpr(A,B).# def
1ca00 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1ca10 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29 0a  inExprList(A,B).
1ca20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ca30 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58 29  ExplainFinish(X)
1ca40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ca50 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e  3VdbeExplanation
1ca60 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76  (X) 0.#endif...v
1ca70 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
1ca80 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
1ca90 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
1caa0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
1cab0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
1cac0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1cad0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
1cae0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
1caf0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
1cb00 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
1cb10 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1cb20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1cb30 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
1cb40 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1cb50 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
1cb60 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
1cb70 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
1cb80 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
1cb90 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
1cba0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1cbb0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
1cbc0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1cbd0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
1cbe0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
1cbf0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1cc00 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1cc10 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
1cc20 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
1cc30 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
1cc40 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1cc50 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
1cc60 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
1cc70 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
1cc80 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
1cc90 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1cca0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ccb0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
1ccc0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
1ccd0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
1cce0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
1ccf0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
1cd00 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
1cd10 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
1cd20 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
1cd30 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
1cd40 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
1cd50 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
1cd60 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
1cd70 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
1cd80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1cd90 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
1cda0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1cdb0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
1cdc0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1cdd0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
1cde0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1cdf0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
1ce00 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
1ce10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ce20 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
1ce30 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
1ce40 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
1ce50 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
1ce60 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
1ce70 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
1ce80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ce90 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
1cea0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
1ceb0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1cec0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
1ced0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
1cee0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
1cef0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
1cf00 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
1cf10 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
1cf20 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1cf30 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
1cf40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1cf50 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
1cf60 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
1cf70 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1cf80 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1cf90 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
1cfa0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
1cfb0 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
1cfc0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1cfd0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
1cfe0 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
1cff0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
1d000 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
1d010 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62  s(sqlite3*);.Tab
1d020 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
1d030 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
1d040 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
1d050 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
1d060 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
1d070 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1d080 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
1d090 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1d0a0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
1d0b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1d0c0 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
1d0d0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1d0e0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
1d0f0 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
1d100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1d110 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
1d120 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1d130 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1d140 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
1d150 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
1d160 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
1d170 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
1d180 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54  umnType(Parse*,T
1d190 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1d1a0 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
1d1b0 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53  lue(Parse*,ExprS
1d1c0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1d1d0 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
1d1e0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1d1f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1d200 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
1d210 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
1d220 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1d230 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
1d240 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
1d250 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
1d260 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d270 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
1d280 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
1d290 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
1d2a0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
1d2b0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1d2c0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1d2d0 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73  te3CodeOnce(Pars
1d2e0 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73  e *);..Bitvec *s
1d2f0 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
1d300 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
1d310 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
1d320 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
1d330 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
1d340 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
1d350 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
1d360 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
1d370 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
1d380 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
1d390 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
1d3a0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
1d3b0 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
1d3c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  *);.int sqlite3B
1d3d0 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
1d3e0 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77  (int,int*);..Row
1d3f0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
1d400 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
1d410 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
1d420 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d430 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
1d440 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
1d450 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
1d460 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
1d470 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
1d480 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
1d490 75 38 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  u8 iBatch, i64);
1d4a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
1d4b0 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
1d4c0 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
1d4d0 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
1d4e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1d4f0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
1d500 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
1d510 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1d520 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
1d530 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1d540 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1d550 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
1d560 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
1d570 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
1d580 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1d590 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
1d5a0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
1d5b0 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   0.#endif..void 
1d5c0 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
1d5d0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1d5e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1d5f0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
1d600 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
1d610 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1d620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1d630 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
1d640 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
1d650 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d660 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1d670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1d680 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
1d690 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1d6a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1d6b0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1d6c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
1d6d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1d6e0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1d6f0 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
1d700 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
1d710 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
1d720 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
1d730 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65 28  e3CodeCoroutine(
1d740 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
1d750 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 76   SelectDest*);.v
1d760 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
1d770 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
1d780 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 53  t*, ExprList*, S
1d790 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
1d7a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1d7b0 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
1d7c0 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
1d7d0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
1d7e0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
1d7f0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
1d800 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
1d810 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
1d820 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
1d830 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
1d840 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
1d850 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
1d860 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
1d870 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
1d880 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
1d890 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
1d8a0 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
1d8b0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
1d8c0 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
1d8d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1d8e0 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
1d8f0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
1d900 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
1d940 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
1d950 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1d960 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
1d970 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
1d980 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
1d990 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
1d9a0 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
1d9b0 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
1d9c0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
1d9d0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1d9e0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
1d9f0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1da00 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
1da10 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
1da20 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
1da30 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
1da40 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1da50 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1da60 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
1da70 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
1da80 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
1da90 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
1daa0 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
1dab0 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
1dac0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
1dad0 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
1db00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1db10 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1db20 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1db30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1db40 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1db50 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1db60 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1db70 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1db80 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1db90 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1dba0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1dbd0 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1dbe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1dbf0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1dc00 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1dc10 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1dc20 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1dc30 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1dc40 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1dc50 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1dc60 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1dc70 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1dc80 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1dc90 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1dca0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1dcb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1dcc0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1dcd0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1dce0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1dcf0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1dd00 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1dd10 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1dd20 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1dd30 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1dd40 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1dd50 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1dd60 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1dd70 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1dd80 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1dd90 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1dda0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1ddb0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1ddc0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1ddd0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1dde0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1ddf0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1de00 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1de10 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1de20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
1de30 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
1de40 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
1de50 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1de60 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1de70 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
1de80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1de90 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
1dea0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1deb0 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
1dec0 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
1ded0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1dee0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
1def0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1df00 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
1df10 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
1df20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1df30 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
1df40 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1df50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
1df60 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1df70 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
1df80 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
1df90 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1dfa0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dfb0 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
1dfc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1dfd0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1dfe0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
1dff0 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
1e000 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e010 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1e020 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
1e030 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e040 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20  achePop(Parse*, 
1e050 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e060 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
1e070 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1e080 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e090 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
1e0a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1e0b0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
1e0c0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
1e0d0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1e0e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e0f0 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
1e100 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1e110 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
1e120 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e130 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1e140 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
1e150 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e160 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e170 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
1e180 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1e190 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e1a0 74 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74  te3ExprCodeConst
1e1b0 61 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70  ants(Parse*, Exp
1e1c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e1d0 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
1e1e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1e1f0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1e200 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
1e210 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
1e220 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1e230 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e240 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
1e250 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
1e260 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e270 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
1e280 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1e290 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1e2a0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1e2b0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
1e2c0 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
1e2d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e2e0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1e2f0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
1e300 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
1e310 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
1e320 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
1e330 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
1e340 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
1e350 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1e360 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1e370 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1e380 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1e390 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1e3a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e3b0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1e3c0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
1e3d0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1e3e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
1e3f0 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
1e400 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
1e410 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
1e420 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
1e430 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1e440 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1e450 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e460 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
1e470 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
1e480 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
1e490 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
1e4a0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
1e4b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e4c0 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
1e4d0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
1e4e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e4f0 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1e500 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1e510 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1e520 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1e530 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1e540 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1e550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1e560 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1e570 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1e580 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1e590 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1e5a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1e5b0 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1e5c0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1e5d0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1e5e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1e5f0 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1e600 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1e610 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1e620 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1e630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1e640 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1e650 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1e660 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1e670 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1e680 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1e690 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1e6a0 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1e6b0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1e6c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e6d0 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1e6e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e6f0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1e700 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1e710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1e720 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1e730 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1e740 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1e750 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1e760 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1e770 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1e780 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1e790 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1e7a0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1e7b0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1e7c0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1e7d0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1e7e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e7f0 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1e800 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1e810 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1e820 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1e830 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e840 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1e850 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1e860 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e870 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1e880 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1e890 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1e8a0 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1e8b0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1e8c0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1e8d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1e8e0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1e8f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e900 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1e910 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1e920 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1e930 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29   Trigger *, int)
1e940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1e950 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1e960 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1e970 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  le*, int, int*);
1e980 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
1e990 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
1e9a0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
1e9b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
1e9c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1e9d0 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
1e9e0 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
1e9f0 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20  able*,int,int,. 
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74      int*,int,int
1ea30 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
1ea40 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
1ea50 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
1ea60 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1ea70 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
1ea80 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
1ea90 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
1eaa0 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
1eab0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1eac0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1ead0 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
1eae0 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
1eaf0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1eb00 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
1eb10 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
1eb20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
1eb30 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1eb40 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
1eb50 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
1eb60 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74   int, char*, int
1eb70 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1eb80 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
1eb90 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
1eba0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
1ebb0 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
1ebc0 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
1ebd0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1ebe0 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
1ebf0 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
1ec00 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
1ec10 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
1ec20 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
1ec30 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
1ec40 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
1ec50 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
1ec60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
1ec70 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
1ec80 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
1ec90 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
1eca0 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
1ecb0 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
1ecc0 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
1ecd0 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
1ece0 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
1ecf0 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
1ed00 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1ed10 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
1ed20 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
1ed30 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1ed40 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
1ed50 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
1ed60 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1ed70 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
1ed80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
1ed90 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
1eda0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
1edb0 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
1edc0 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
1edd0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
1ede0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
1edf0 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
1ee00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
1ee10 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
1ee20 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
1ee30 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1ee40 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
1ee50 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
1ee60 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1ee70 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
1ee80 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
1ee90 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
1eea0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
1eeb0 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
1eee0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1eef0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
1ef00 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
1ef10 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
1ef20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1ef30 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
1ef40 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1ef50 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1ef60 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1ef70 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
1ef80 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
1ef90 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
1efa0 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
1efb0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
1efc0 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
1efd0 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
1efe0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
1eff0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1f000 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
1f010 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f020 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1f030 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
1f040 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
1f050 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f070 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1f080 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1f090 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1f0a0 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
1f0b0 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
1f0c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1f0d0 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
1f0e0 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
1f0f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1f100 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
1f110 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1f120 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
1f130 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
1f140 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
1f150 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1f160 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
1f170 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1f180 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
1f190 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f1a0 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
1f1b0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
1f1c0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1f1f0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
1f200 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
1f210 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f220 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
1f230 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
1f240 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
1f250 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
1f260 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f270 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
1f280 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
1f290 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1f2a0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1f2b0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
1f2c0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
1f2d0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1f2e0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1f2f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1f300 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
1f310 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
1f320 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
1f330 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
1f340 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
1f350 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
1f360 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
1f370 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
1f380 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
1f390 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
1f3a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f3b0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
1f3c0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
1f3d0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
1f3e0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
1f3f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
1f400 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
1f410 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1f420 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1f430 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
1f440 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f450 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
1f460 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
1f470 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
1f480 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f490 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
1f4a0 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
1f4b0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
1f4c0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
1f4d0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
1f4e0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
1f4f0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1f500 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
1f510 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
1f520 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
1f530 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
1f540 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
1f550 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1f560 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
1f570 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
1f580 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
1f590 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
1f5a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
1f5b0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
1f5c0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
1f5d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f5e0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
1f5f0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
1f600 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
1f610 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
1f620 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
1f630 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
1f640 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
1f650 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1f660 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1f670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1f680 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
1f690 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
1f6a0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
1f6b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f6c0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
1f6d0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
1f6e0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
1f6f0 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
1f700 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
1f710 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
1f720 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1f730 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
1f740 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
1f750 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
1f760 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
1f770 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
1f780 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
1f790 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
1f7a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f7b0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
1f7c0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
1f7d0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
1f7e0 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
1f7f0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
1f800 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1f810 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
1f820 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  e*, Expr*);.int 
1f830 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
1f840 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
1f850 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
1f860 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
1f870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f880 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
1f890 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
1f8a0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
1f8b0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
1f8c0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1f8d0 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
1f8e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1f8f0 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
1f900 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
1f910 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f920 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
1f930 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
1f940 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
1f950 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
1f960 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
1f970 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
1f980 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
1f990 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
1f9a0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f9b0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
1f9c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
1f9d0 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
1f9e0 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
1f9f0 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
1fa00 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
1fa10 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
1fa20 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
1fa30 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
1fa40 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
1fa50 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
1fa60 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
1fa70 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
1fa80 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
1fa90 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
1faa0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
1fab0 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
1fac0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
1fad0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
1fae0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43  il.c.** file.  C
1faf0 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74  ode should use t
1fb00 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62  he MACRO forms b
1fb10 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72  elow, as the Var
1fb20 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a  int32 versions.*
1fb30 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61  * are coded to a
1fb40 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65  ssume the single
1fb50 20 62 79 74 65 20 63 61 73 65 20 69 73 20 61 6c   byte case is al
1fb60 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77  ready handled (w
1fb70 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43  hich .** the MAC
1fb80 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a  RO form does)..*
1fb90 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
1fba0 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
1fbb0 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74  char*, u64);.int
1fbc0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1fbd0 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61  t32(unsigned cha
1fbe0 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c  r*, u32);.u8 sql
1fbf0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
1fc00 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1fc10 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
1fc20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1fc30 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
1fc40 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
1fc50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
1fc60 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
1fc70 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72  /*.** The header
1fc80 20 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e   of a record con
1fc90 73 69 73 74 73 20 6f 66 20 61 20 73 65 71 75 65  sists of a seque
1fca0 6e 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nce variable-len
1fcb0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  gth integers..**
1fcc0 20 54 68 65 73 65 20 69 6e 74 65 67 65 72 73 20   These integers 
1fcd0 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79  are almost alway
1fce0 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20  s small and are 
1fcf0 65 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e  encoded as a sin
1fd00 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65  gle byte..** The
1fd10 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1fd20 73 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65  s take advantage
1fd30 20 74 68 69 73 20 66 61 63 74 20 74 6f 20 70 72   this fact to pr
1fd40 6f 76 69 64 65 20 61 20 66 61 73 74 20 65 6e 63  ovide a fast enc
1fd50 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64  ode.** and decod
1fd60 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
1fd70 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65  s in a record he
1fd80 61 64 65 72 2e 20 20 49 74 20 69 73 20 66 61 73  ader.  It is fas
1fd90 74 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d  ter for the comm
1fda0 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65  on.** case where
1fdb0 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
1fdc0 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
1fdd0 49 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73  It is a little s
1fde0 6c 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a  lower when the.*
1fdf0 2a 20 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f  * integer is two
1fe00 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20   or more bytes. 
1fe10 20 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20   But overall it 
1fe20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a  is faster..**.**
1fe30 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65   The following e
1fe40 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
1fe50 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a  quivalent:.**.**
1fe60 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
1fe70 47 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  GetVarint32( A, 
1fe80 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d  &B );.**     x =
1fe90 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1fea0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
1feb0 2a 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56 61  **     x = getVa
1fec0 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
1fed0 2a 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56 61  **     x = putVa
1fee0 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
1fef0 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  **.*/.#define ge
1ff00 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
1ff10 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
1ff20 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
1ff30 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
1ff40 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
1ff50 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
1ff60 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
1ff70 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
1ff80 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
1ff90 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
1ffa0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
1ffb0 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
1ffc0 75 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  utVarint32((A),(
1ffd0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
1ffe0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
1fff0 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
20000 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
20010 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
20020 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
20030 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
20040 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49  ityStr(Vdbe *, I
20050 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ndex *);.void sq
20060 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
20070 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61  tyStr(Vdbe *, Ta
20080 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c  ble *);.char sql
20090 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
200a0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
200b0 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
200c0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
200d0 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
200e0 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
200f0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
20100 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
20110 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
20120 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
20130 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
20140 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  64*, int, u8);.v
20150 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
20160 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
20170 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
20180 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
20190 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
201a0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
201b0 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
201c0 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
201d0 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
201e0 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
201f0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
20200 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
20210 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
20220 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
20230 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
20240 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  EST) || \.    de
20250 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
20260 55 47 5f 4f 53 5f 54 52 41 43 45 29 0a 63 6f 6e  UG_OS_TRACE).con
20270 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
20280 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
20290 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
202a0 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
202b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
202c0 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
202d0 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
202e0 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
202f0 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
20300 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
20310 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53  har*,int);.CollS
20320 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
20330 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
20340 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
20350 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
20360 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
20370 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
20380 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
20390 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
203a0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
203b0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
203c0 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e  se, Expr*, Token
203d0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
203e0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
203f0 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
20400 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
20410 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
20420 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
20430 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
20440 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
20450 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
20460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
20470 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
20480 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
20490 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
204a0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
204b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
204c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
204d0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
204e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
204f0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
20500 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
20510 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
20520 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
20530 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
20540 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
20550 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
20560 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
20570 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
20580 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
20590 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
205a0 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
205b0 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
205c0 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
205d0 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e  ar *z,int);..con
205e0 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
205f0 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
20600 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
20610 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
20620 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
20630 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
20640 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
20650 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
20660 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
20670 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20690 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
206a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
206b0 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
206c0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
206d0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
206e0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
206f0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
20700 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
20710 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
20720 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64  , int, u8);.#ifd
20730 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20740 5f 53 54 41 54 33 0a 63 68 61 72 20 2a 73 71 6c  _STAT3.char *sql
20750 69 74 65 33 55 74 66 38 74 6f 31 36 28 73 71 6c  ite3Utf8to16(sql
20760 69 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61 72  ite3 *, u8, char
20770 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b   *, int, int *);
20780 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
20790 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
207a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
207b0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
207c0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
207d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
207e0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
207f0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
20800 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
20810 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
20820 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
20830 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
20840 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
20850 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
20860 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20870 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
20880 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
20890 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
208a0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
208b0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
208c0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
208d0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
208e0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
208f0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
20900 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
20910 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
20920 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
20930 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
20940 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
20950 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
20960 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
20970 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
20980 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
20990 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
209a0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
209b0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
209c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
209d0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
209e0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
209f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20a00 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
20a10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20a20 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
20a30 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
20a40 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
20a50 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
20a60 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20a70 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
20a80 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
20a90 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
20aa0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20ac0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
20ad0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
20ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
20af0 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
20b00 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
20b10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20b20 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
20b30 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20b40 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
20b50 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
20b60 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
20b70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20b80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20b90 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
20ba0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
20bb0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
20bc0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
20bd0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
20be0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
20bf0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
20c00 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
20c10 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
20c20 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
20c30 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
20c40 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
20c50 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
20c60 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
20c70 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
20c80 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
20c90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
20ca0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
20cb0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
20cc0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
20cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
20ce0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
20cf0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
20d00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20d10 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
20d20 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
20d30 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
20d40 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
20d50 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
20d60 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
20d70 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
20d80 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
20d90 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
20da0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
20db0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
20dc0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
20dd0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
20de0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
20df0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
20e00 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
20e10 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
20e20 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
20e30 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
20e40 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
20e50 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
20e60 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
20e70 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
20e80 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
20e90 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
20ea0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
20eb0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
20ec0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
20ed0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
20ee0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
20ef0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
20f00 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
20f10 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
20f20 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
20f30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20f40 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
20f50 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
20f60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20f70 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
20f80 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
20f90 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
20fa0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
20fb0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
20fc0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
20fd0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
20fe0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
20ff0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
21000 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  oc(sqlite3*,int)
21010 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
21020 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50  e3IndexKeyinfo(P
21030 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  arse *, Index *)
21040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  ;.int sqlite3Cre
21050 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
21060 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
21070 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
21080 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
21090 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
210a0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
210b0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
210c0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
210d0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
210e0 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
210f0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
21100 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
21110 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
21120 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
21130 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
21140 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
21150 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
21160 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
21170 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
21180 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
21190 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
211a0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
211b0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
211c0 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
211d0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
211e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
211f0 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75  endSpace(StrAccu
21200 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  m*,int);.char *s
21210 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
21220 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
21230 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21240 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
21250 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
21260 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
21270 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
21280 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
21290 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
212a0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
212b0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
212c0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
212d0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
212e0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
212f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
21300 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
21310 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
21320 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
21330 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  );../*.** The in
21340 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
21350 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
21360 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
21370 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
21380 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
21390 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
213a0 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
213b0 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
213c0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
213d0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
213e0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
213f0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
21400 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
21410 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
21420 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
21430 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
21440 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
21450 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
21460 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
21470 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
21480 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
21490 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
214a0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
214b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
214c0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
214d0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
214e0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
214f0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
21500 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
21510 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
21520 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
21530 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
21540 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
21550 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
21560 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
21570 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
21580 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
21590 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
215a0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
215b0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
215c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
215d0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
215e0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
215f0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
21600 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
21610 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
21620 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21630 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
21640 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21650 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
21660 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21670 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
21680 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21690 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
216a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
216b0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
216c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
216d0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
216e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
216f0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
21700 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
21710 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21720 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
21730 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
21740 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
21750 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
21760 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
21770 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
21780 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
21790 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
217a0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
217b0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
217c0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  c(sqlite3 *db, c
217d0 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20  har **);.   int 
217e0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
217f0 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
21800 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
21810 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
21820 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
21830 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
21840 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
21850 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
21860 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
21870 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
21880 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
21890 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
218a0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
218b0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
218c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56   int, int);.   V
218d0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
218e0 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
218f0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
21900 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21910 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
21920 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
21930 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
21940 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21950 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
21960 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
21970 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21980 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
21990 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
219a0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
219b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
219c0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
219d0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
219e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
219f0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
21a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21a10 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
21a20 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
21a30 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
21a40 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
21a50 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
21a60 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
21a70 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
21a80 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
21a90 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
21aa0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
21ab0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
21ac0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
21ad0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21ae0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
21af0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
21b00 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
21b10 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
21b20 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
21b30 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
21b40 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
21b50 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
21b60 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
21b70 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
21b80 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e  te3_value**);.in
21b90 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
21ba0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
21bb0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21bc0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
21bd0 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
21be0 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
21bf0 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
21c00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
21c10 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
21c20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21c30 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
21c40 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
21c50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21c60 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21c70 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
21c80 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
21c90 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
21ca0 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
21cb0 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
21cc0 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
21cd0 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
21ce0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
21cf0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21d00 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
21d10 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
21d20 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
21d30 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
21d40 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
21d50 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
21d60 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
21d70 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
21d80 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
21d90 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
21da0 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
21db0 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
21dc0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
21dd0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
21de0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
21df0 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
21e00 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
21e10 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
21e20 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
21e30 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
21e40 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
21e50 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
21e60 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
21e70 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
21e80 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
21e90 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
21ea0 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
21eb0 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
21ec0 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
21ed0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
21ee0 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20  is .** provided 
21ef0 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
21f00 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
21f10 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
21f20 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
21f30 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
21f40 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
21f50 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
21f60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21f70 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
21f80 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
21f90 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
21fa0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
21fb0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
21fc0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
21fd0 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
21fe0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21ff0 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
22000 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
22010 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  ist*, int);.  in
22020 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
22030 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
22040 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
22050 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
22060 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
22070 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
22080 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
22090 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
220a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
220b0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
220c0 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e  ,b,c,d).  #defin
220d0 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
220e0 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66  (a,b,c,d).  #def
220f0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
22100 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
22110 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
22120 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
22130 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
22140 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
22150 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64  (a,b,c,d) 0.#end
22160 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
22170 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
22180 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
22190 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
221a0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
221b0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
221c0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
221d0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
221e0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
221f0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
22200 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
22210 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22220 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
22230 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
22240 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
22250 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
22260 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
22270 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
22280 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
22290 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
222a0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
222b0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
222c0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
222d0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
222e0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
222f0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
22300 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
22310 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
22320 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
22330 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
22340 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
22350 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
22360 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
22370 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
22380 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
22390 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
223a0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
223b0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
223c0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
223d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
223e0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
223f0 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
22400 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
22410 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
22420 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22430 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22440 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69  ().#endif..#defi
22450 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
22460 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64  D           1.#d
22470 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
22480 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32  PH             2
22490 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
224a0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20  X_INDEX_ASC     
224b0 20 20 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    3.#define IN_I
224c0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
224d0 20 20 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74       4.int sqlit
224e0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
224f0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22500 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22510 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22520 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22530 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22540 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22550 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22560 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
22570 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
22580 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
22590 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
225a0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
225b0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
225c0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
225d0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
225e0 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
225f0 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22600 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22610 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22620 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22630 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22640 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22650 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22660 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22670 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22680 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22690 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
226a0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
226b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
226c0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
226d0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
226e0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
226f0 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22700 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22710 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22720 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22730 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22740 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22750 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22760 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22770 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22780 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22790 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
227a0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
227b0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
227c0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
227d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
227e0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
227f0 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22800 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22810 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22820 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22830 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22840 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22850 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22860 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22870 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
22880 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
22890 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
228a0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
228b0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
228c0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
228d0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
228e0 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
228f0 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
22900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
22910 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
22920 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
22930 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
22940 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
22950 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
22960 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
22970 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
22980 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
22990 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
229a0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
229b0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
229c0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
229d0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
229e0 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
229f0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
22a00 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
22a10 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
22a20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
22a30 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
22a40 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
22a50 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
22a60 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22a70 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
22a80 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
22a90 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
22aa0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
22ab0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
22ac0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
22ad0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
22ae0 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
22af0 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
22b00 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
22b10 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
22b20 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
22b30 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
22b40 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
22b50 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
22b60 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
22b70 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
22b80 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
22b90 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
22ba0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
22bb0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
22bc0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
22bd0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
22be0 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
22bf0 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
22c00 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
22c10 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
22c20 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
22c30 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22c40 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
22c50 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
22c60 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
22c70 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
22c80 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
22c90 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
22ca0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
22cb0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
22cc0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
22cd0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
22ce0 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
22cf0 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
22d00 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
22d10 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
22d20 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
22d30 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
22d40 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
22d50 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
22d60 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22d70 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
22d80 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
22d90 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
22da0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
22db0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
22dc0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
22dd0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
22de0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
22df0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
22e00 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
22e10 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
22e20 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
22e30 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
22e40 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
22e50 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
22e60 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
22e70 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
22e80 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
22e90 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
22ea0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
22eb0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
22ec0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
22ed0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
22ee0 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
22ef0 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
22f00 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
22f10 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
22f20 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
22f30 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
22f40 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
22f50 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
22f60 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
22f70 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
22f80 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
22f90 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
22fa0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
22fb0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
22fc0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
22fd0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
22fe0 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
22ff0 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23000 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23010 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23020 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23030 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
23040 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
23050 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
23060 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
23070 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
23080 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
23090 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
230a0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
230b0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
230c0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
230d0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
230e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
230f0 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23100 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23110 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23120 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23130 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
23140 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
23150 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
23160 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
23170 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23180 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23190 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
231a0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
231b0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
231c0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
231d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
231e0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
231f0 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23200 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23210 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23220 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23230 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23240 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23250 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
23260 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
23270 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
23280 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
23290 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
232a0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
232b0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
232c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
232d0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
232e0 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
232f0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23300 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23310 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23320 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23330 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23340 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23350 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23360 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.