/ Hex Artifact Content
Login

Artifact cabeb0401566d80503a0bc6e2d12e7fe2577bf6d:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70  * Macros to comp
3390: 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20  ute minimum and 
33a0: 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e  maximum of two n
33b0: 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  umbers..*/.#defi
33c0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
33d0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 64  <(B)?(A):(B)).#d
33e0: 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28  efine MAX(A,B) (
33f0: 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29  (A)>(B)?(A):(B))
3400: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
3410: 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63   see if this mac
3420: 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43  hine uses EBCDIC
3430: 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65  .  (Yes, believe
3440: 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74   it or.** not, t
3450: 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d  here are still m
3460: 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72  achines out ther
3470: 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49  e that use EBCDI
3480: 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d  C.).*/.#if 'A' =
3490: 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e  = '\301'.# defin
34a0: 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20  e SQLITE_EBCDIC 
34b0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
34c0: 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a   SQLITE_ASCII 1.
34d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
34e0: 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20  tegers of known 
34f0: 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79  sizes.  These ty
3500: 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61  pedefs might cha
3510: 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63  nge for architec
3520: 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74  tures.** where t
3530: 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20  he sizes very.  
3540: 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  Preprocessor mac
3550: 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  ros are availabl
3560: 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a  e so that the.**
3570: 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f   types can be co
3580: 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66  nveniently redef
3590: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
35a0: 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73  type.  Like this
35b0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20  :.**.**         
35c0: 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59  cc '-DUINTPTR_TY
35d0: 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74  PE=long long int
35e0: 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ' ....*/.#ifndef
35f0: 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69   UINT32_TYPE.# i
3600: 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32  fdef HAVE_UINT32
3610: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  _T.#  define UIN
3620: 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f  T32_TYPE uint32_
3630: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
3640: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
3650: 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e  nsigned int.# en
3660: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
3670: 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23  ef UINT16_TYPE.#
3680: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  16_T.#  define U
36a0: 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31  INT16_TYPE uint1
36b0: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
36c0: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
36d0: 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20   unsigned short 
36e0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
36f0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36  if.#ifndef INT16
3700: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3710: 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  VE_INT16_T.#  de
3720: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
3730: 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23  int16_t.# else.#
3740: 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54    define INT16_T
3750: 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  YPE short int.# 
3760: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3770: 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a  ndef UINT8_TYPE.
3780: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
3790: 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  T8_T.#  define U
37a0: 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f  INT8_TYPE uint8_
37b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
37c0: 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e  ne UINT8_TYPE un
37d0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
37e0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
37f0: 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69  ef INT8_TYPE.# i
3800: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54  fdef HAVE_INT8_T
3810: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f  .#  define INT8_
3820: 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c  TYPE int8_t.# el
3830: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  se.#  define INT
3840: 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68  8_TYPE signed ch
3850: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3860: 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f  f.#ifndef LONGDO
3870: 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69  UBLE_TYPE.# defi
3880: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
3890: 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23  PE long double.#
38a0: 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71  endif.typedef sq
38b0: 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20  lite_int64 i64; 
38c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
38d0: 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  te signed intege
38e0: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c  r */.typedef sql
38f0: 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20  ite_uint64 u64; 
3900: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
3910: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
3920: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
3930: 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20  NT32_TYPE u32;  
3940: 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79           /* 4-by
3950: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
3960: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
3970: 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20  INT16_TYPE u16; 
3980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
3990: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
39a0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
39b0: 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20  INT16_TYPE i16; 
39c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
39d0: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
39e0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
39f0: 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20  INT8_TYPE u8;   
3a00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
3a10: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
3a20: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
3a30: 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20  INT8_TYPE i8;   
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
3a50: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3a60: 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51  ger */../*.** SQ
3a70: 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20  LITE_MAX_U32 is 
3a80: 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74  a u64 constant t
3a90: 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d  hat is the maxim
3aa0: 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20  um u64 value.** 
3ab0: 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  that can be stor
3ac0: 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68  ed in a u32 with
3ad0: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61  out loss of data
3ae0: 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
3af0: 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66  is 0x00000000fff
3b00: 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61  fffff.  But beca
3b10: 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66  use of quirks of
3b20: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c   some compilers,
3b30: 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73   we.** have to s
3b40: 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65  pecify the value
3b50: 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74   in the less int
3b60: 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68  uitive manner sh
3b70: 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  own:.*/.#define 
3b80: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20  SQLITE_MAX_U32  
3b90: 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d  ((((u64)1)<<32)-
3ba0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  1)../*.** The da
3bb0: 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73  tatype used to s
3bc0: 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f  tore estimates o
3bd0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
3be0: 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62  rows in a.** tab
3bf0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
3c00: 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  is is an unsigne
3c10: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20  d integer type. 
3c20: 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a   For 99.9% of.**
3c30: 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32   the world, a 32
3c40: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20  -bit integer is 
3c50: 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74  sufficient.  But
3c60: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
3c70: 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  r.** can be used
3c80: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3c90: 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a   if desired..*/.
3ca0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34  #ifdef SQLITE_64
3cb0: 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64  BIT_STATS. typed
3cc0: 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20  ef u64 tRowcnt; 
3cd0: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c     /* 64-bit onl
3ce0: 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61  y if requested a
3cf0: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a  t compile-time *
3d00: 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66  /.#else. typedef
3d10: 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20   u32 tRowcnt;   
3d20: 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68   /* 32-bit is th
3d30: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e  e default */.#en
3d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
3d50: 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  s to determine w
3d60: 68 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69  hether the machi
3d70: 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74  ne is big or lit
3d80: 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 65  tle endian,.** e
3d90: 76 61 6c 75 61 74 65 64 20 61 74 20 72 75 6e 74  valuated at runt
3da0: 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ime..*/.#ifdef S
3db0: 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
3dc0: 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  ON.const int sql
3dd0: 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65 6c  ite3one = 1;.#el
3de0: 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  se.extern const 
3df0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a  int sqlite3one;.
3e00: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
3e10: 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65 66 69  ed(i386) || defi
3e20: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c  ned(__i386__) ||
3e30: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
3e40: 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )\.             
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3e70: 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  _64) || defined(
3e80: 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20 64 65  __x86_64__).# de
3e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3ea0: 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66  NDIAN    0.# def
3eb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3ec0: 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69  EENDIAN 1.# defi
3ed0: 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ne SQLITE_UTF16N
3ee0: 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54  ATIVE  SQLITE_UT
3ef0: 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 64 65  F16LE.#else.# de
3f00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
3f10: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
3f20: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
3f30: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
3f40: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3f50: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
3f60: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
3f70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
3f80: 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c 49 54  F16NATIVE (SQLIT
3f90: 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49  E_BIGENDIAN?SQLI
3fa0: 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54  TE_UTF16BE:SQLIT
3fb0: 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69  E_UTF16LE).#endi
3fc0: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e  f../*.** Constan
3fd0: 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65  ts for the large
3fe0: 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20  st and smallest 
3ff0: 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20  possible 64-bit 
4000: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e  signed integers.
4010: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
4020: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
4030: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
4040: 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  on both 32-bit a
4050: 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d  nd 64-bit.** com
4060: 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  pilers..*/.#defi
4070: 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34  ne LARGEST_INT64
4080: 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28    (0xffffffff|((
4090: 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (i64)0x7fffffff)
40a0: 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53  <<32)).#define S
40b0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28  MALLEST_INT64 ((
40c0: 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45  (i64)-1) - LARGE
40d0: 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a 2a  ST_INT64)../* .*
40e0: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
40f0: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
4100: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
4110: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
4120: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
4130: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
4140: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
4150: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
4160: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
4170: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
4180: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
4190: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
41a0: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
41b0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
41c0: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
41d0: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
41e0: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
41f0: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
4200: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
4210: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
4220: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
4230: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
4240: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
4250: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
4260: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
4270: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
4280: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
4290: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
42a0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
42b0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
42c0: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
42d0: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
42e0: 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67 68 74  plemention might
42f0: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
4300: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
4310: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
4320: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
4330: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
4340: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
4350: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4360: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
4370: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4380: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4390: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
43a0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
43b0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
43c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
43d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
43e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
43f0: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
4400: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
4410: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
4420: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
4430: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
4440: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
4450: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
4460: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
4470: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
4480: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
4490: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
44a0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
44b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
44c0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
44d0: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
44e0: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
44f0: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
4500: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
4510: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
4520: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
4530: 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52 47 45  ls.h>.# if TARGE
4540: 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20 20 20  T_OS_IPHONE.#   
4550: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
4560: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20 20 64  _MMAP_SIZE.#   d
4570: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
4580: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
4590: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
45a0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
45b0: 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65  MAP_SIZE.# if de
45c0: 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29  fined(__linux__)
45d0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
45e0: 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28  _WIN32) \.  || (
45f0: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
4600: 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f  _) && defined(__
4610: 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20  MACH__)) \.  || 
4620: 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 0a 23  defined(__sun).#
4630: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4640: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4650: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
4660: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
4670: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
4680: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4690: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
46a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
46b0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
46c0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
46f0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
4700: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
4710: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
4720: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
4730: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
4740: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
4750: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
4760: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
4770: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
4780: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
4790: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
47a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
47b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
47c0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
47d0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
47e0: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
47f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
4800: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
4810: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
4820: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
4830: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
4840: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
4850: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4860: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
4870: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
4880: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
4890: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
48a0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
48b0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
48c0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
48d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
48e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
48f0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
4900: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
4910: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
4920: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
4930: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
4940: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
4950: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
4960: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
4970: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4980: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
4990: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
49a0: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
49b0: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
49c0: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
49d0: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
49e0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
49f0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
4a00: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
4a10: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
4a20: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
4a30: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
4a40: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
4a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
4a60: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
4a70: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
4a80: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
4a90: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
4aa0: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
4ab0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
4ac0: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4ae0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
4af0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
4b00: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
4b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
4b20: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
4b30: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
4b40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
4b50: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4b60: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
4b70: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
4b80: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
4b90: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
4ba0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
4bb0: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
4bc0: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
4bd0: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
4be0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
4bf0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
4c00: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
4c10: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
4c20: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
4c30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4c40: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
4c50: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
4c60: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4c70: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
4c80: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
4c90: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
4ca0: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
4cb0: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
4cc0: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
4cd0: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
4ce0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
4cf0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
4d00: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
4d10: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
4d20: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
4d30: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
4d40: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
4d50: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
4d60: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
4d70: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
4d80: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
4d90: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
4da0: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
4db0: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
4dc0: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
4dd0: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
4de0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
4df0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
4e00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
4e10: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
4e20: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
4e30: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
4e40: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
4e50: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
4e60: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
4e70: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
4e80: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
4e90: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
4ea0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
4eb0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
4ec0: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
4ed0: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
4ee0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
4ef0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
4f00: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
4f10: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
4f20: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
4f30: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
4f40: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
4f50: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
4f60: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
4f70: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
4f80: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
4f90: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
4fa0: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
4fb0: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
4fc0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
4fd0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
4fe0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
4ff0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
5000: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
5010: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
5020: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
5030: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
5040: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
5050: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
5060: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
5070: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
5080: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
5090: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
50a0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
50b0: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
50c0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
50d0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
50e0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
50f0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
5100: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
5110: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
5120: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
5130: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
5140: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5150: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
5160: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
5170: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
5180: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
5190: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
51a0: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
51b0: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
51c0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
51d0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
51e0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
51f0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
5200: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
5210: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
5220: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
5230: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
5240: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
5250: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
5260: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
5270: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
5280: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
5290: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
52a0: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
52b0: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
52c0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
52d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
52e0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
52f0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
5300: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5310: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
5320: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
5330: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
5340: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
5350: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5360: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
5370: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
5380: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
5390: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
53a0: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
53b0: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
53c0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
53d0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
53e0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
53f0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
5400: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
5410: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
5420: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5430: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
5440: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
5460: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
5470: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
5480: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
5490: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
54a0: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
54b0: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
54c0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
54d0: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
54e0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
54f0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
5500: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
5510: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
5520: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
5530: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
5540: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
5550: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
5560: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
5570: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
5580: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
5590: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
55a0: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
55b0: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
55c0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
55d0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
55e0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
55f0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
5600: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
5610: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
5620: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
5630: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
5640: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
5650: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
5660: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5670: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
5680: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
5690: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
56a0: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
56b0: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
56c0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
56d0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
56e0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
56f0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
5700: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
5710: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
5720: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
5730: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
5740: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
5750: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
5760: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
5770: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
5780: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
5790: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
57a0: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
57b0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
57c0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
57d0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
57e0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
57f0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5800: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
5810: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
5820: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
5830: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
5840: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
5850: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
5860: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
5870: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
5880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
5890: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
58b0: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
58c0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
58d0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
58e0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
58f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
5900: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
5910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5920: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
5930: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
5940: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
5950: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
5960: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5970: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
5980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5990: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
59a0: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
59b0: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
59c0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
59d0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
59e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
59f0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
5a00: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
5a10: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
5a20: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
5a30: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
5a40: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
5a50: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
5a60: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
5a70: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
5a80: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5aa0: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
5ab0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
5ac0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
5ad0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
5ae0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
5af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b00: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
5b10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b20: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
5b30: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
5b40: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
5b50: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
5b60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b70: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
5b90: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
5ba0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
5bb0: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
5bc0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
5bd0: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
5be0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5bf0: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
5c00: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
5c10: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
5c20: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
5c30: 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
5c40: 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65  lectDest;.typede
5c50: 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  f struct SrcList
5c60: 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65   SrcList;.typede
5c70: 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75  f struct StrAccu
5c80: 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65  m StrAccum;.type
5c90: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5ca0: 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20   Table;.typedef 
5cb0: 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b  struct TableLock
5cc0: 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65   TableLock;.type
5cd0: 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e  def struct Token
5ce0: 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20   Token;.typedef 
5cf0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
5d00: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
5d10: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
5d20: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
5d30: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
5d40: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
5d50: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
5d60: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
5d70: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
5d80: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
5d90: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
5da0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5db0: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
5dc0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5dd0: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
5de0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5df0: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
5e00: 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  fo;../*.** Defer
5e10: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
5e20: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
5e30: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
5e40: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
5e50: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
5e60: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
5e70: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
5e80: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
5e90: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
5ea0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
5eb0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
5ec0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
5ed0: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
5ee0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
5ef0: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
5f00: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
5f10: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
5f20: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
5f30: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
5f40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
5f50: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
5f60: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
5f70: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
5f80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5f90: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
5fa0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
5fb0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
5fc0: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
5fd0: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
5fe0: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
5ff0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
6000: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
6010: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6020: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
6030: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
6040: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
6050: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
6060: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
6070: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
6080: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
6090: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
60a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
60b0: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
60c0: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
60d0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
60e0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
60f0: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
6100: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
6110: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
6120: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
6130: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
6140: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
6150: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
6160: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
6170: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
6180: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
6190: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
61a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
61b0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
61c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
61d0: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
61e0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
61f0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
6200: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
6210: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
6220: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
6230: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
6240: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
6250: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
6260: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
6270: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
6280: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
6290: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
62a0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
62b0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
62c0: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
62d0: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
62e0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
62f0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
6300: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
6310: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
6320: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
6330: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
6340: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
6350: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
6360: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
6370: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
6380: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
6390: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
63a0: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
63b0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
63c0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
63d0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
63e0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
63f0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
6400: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
6410: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
6420: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
6430: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
6440: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
6450: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
6460: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
6470: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
6480: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
6490: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
64a0: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
64b0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
64c0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
64d0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
64e0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
64f0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
6500: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
6510: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
6520: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
6530: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
6540: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6550: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
6560: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
6570: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
6580: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
6590: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
65a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
65b0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
65c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
65d0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
65e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
65f0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
6600: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
6610: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
6620: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
6630: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
6640: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
6650: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
6660: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
6670: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
6680: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
6690: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
66a0: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
66b0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
66c0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
66d0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
66e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
66f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
6700: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
6710: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
6720: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
6730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
6740: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
6750: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
6760: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
6770: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
6780: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
6790: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
67a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
67b0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
67c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
67d0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
67e0: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
67f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6800: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
6810: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
6820: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
6830: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6840: 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
6850: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
6860: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
6870: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
6880: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6890: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
68a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
68b0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
68c0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
68d0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
68e0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
68f0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
6900: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
6910: 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
6920: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
6930: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
6940: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
6950: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
6960: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
6970: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
6980: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6990: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
69a0: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
69b0: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
69c0: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
69d0: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
69e0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
69f0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
6a00: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
6a10: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
6a20: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
6a30: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
6a40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
6a50: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
6a60: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
6a70: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
6a80: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
6a90: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6aa0: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
6ab0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
6ac0: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
6ad0: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
6ae0: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
6af0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
6b00: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
6b10: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
6b20: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
6b30: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
6b40: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
6b50: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
6b60: 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  s) */../*.** The
6b70: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
6b80: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
6b90: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
6ba0: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
6bb0: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
6bc0: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
6bd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6be0: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
6bf0: 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
6c00: 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a  _DEPTH+1)../*.**
6c10: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
6c20: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
6c30: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
6c40: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
6c50: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
6c60: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
6c70: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6c80: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
6c90: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
6ca0: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
6cb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6cc0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
6cd0: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
6ce0: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
6cf0: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
6d00: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
6d10: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
6d20: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
6d30: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
6d40: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
6d50: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
6d60: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
6d70: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
6d80: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
6d90: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
6da0: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
6db0: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
6dc0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
6dd0: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
6de0: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
6df0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
6e00: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
6e10: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
6e20: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
6e30: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
6e40: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
6e50: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
6e60: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
6e70: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
6e80: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
6e90: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
6ea0: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
6eb0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6ec0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
6ed0: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
6ee0: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
6ef0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
6f00: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
6f10: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
6f20: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
6f30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
6f40: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
6f50: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
6f60: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
6f70: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
6f80: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
6f90: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
6fa0: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
6fb0: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
6fc0: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
6fd0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6fe0: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
6ff0: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
7000: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
7010: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
7020: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
7030: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7040: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
7050: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
7060: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
7070: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
7080: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
7090: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
70a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
70b0: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
70c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
70d0: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
70e0: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
70f0: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
7100: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
7110: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7120: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
7130: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
7140: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
7150: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7160: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
7170: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
7180: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
7190: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
71a0: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
71b0: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
71c0: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
71d0: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
71e0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
71f0: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
7200: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
7210: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
7220: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
7230: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
7240: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
7250: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
7260: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
7270: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
7280: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
7290: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
72a0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
72b0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
72c0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
72d0: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
72e0: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
72f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
7300: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
7310: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
7320: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
7330: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
7340: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
7350: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
7360: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
7370: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
7380: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
7390: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
73a0: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
73b0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
73c0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
73d0: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
73e0: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
73f0: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
7400: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
7410: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7420: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7430: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
7440: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
7450: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
7460: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
7470: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
7480: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
7490: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
74a0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
74b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
74c0: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
74d0: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
74e0: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
74f0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
7500: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
7510: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
7520: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
7530: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
7540: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
7550: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
7560: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
7570: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
7580: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
7590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
75a0: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
75b0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
75c0: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
75d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
75e0: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
75f0: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
7600: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
7610: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
7620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
7630: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
7640: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
7650: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
7660: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
7670: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
7680: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
7690: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
76a0: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
76b0: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
76c0: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
76d0: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
76e0: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
7710: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
7720: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
7730: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
7740: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
7750: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
7760: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
7770: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20  urning */.  u16 
7780: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
7790: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
77a0: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
77b0: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
77c0: 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ns */.  u8 autoC
77d0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
77e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
77f0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
7800: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
7810: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7820: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
7830: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
7840: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
7850: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
7860: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
7870: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
7880: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
7890: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
78a0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
78b0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
78c0: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
78d0: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
78e0: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
78f0: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
7900: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
7910: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
7920: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
7930: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
7940: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
7950: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
7960: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
7970: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
7980: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
7990: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
79a0: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
79b0: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
79c0: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
79d0: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
79e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
79f0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
7a00: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
7a10: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
7a20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
7a30: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
7a40: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
7a50: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
7a80: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
7a90: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
7aa0: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ac0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
7ad0: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
7ae0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
7af0: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
7b00: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7b10: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7b20: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
7b30: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
7b40: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
7b50: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
7b60: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  s */.  struct sq
7b70: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
7b80: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
7b90: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
7ba0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
7bb0: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7bc0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7bd0: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7be0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7bf0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7c00: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
7c20: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
7c30: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
7c40: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
7c50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c60: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
7c70: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
7c80: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
7c90: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
7ca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
7cb0: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
7cc0: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
7cd0: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
7ce0: 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56 64  ;.  int activeVd
7cf0: 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  beCnt;          
7d00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
7d10: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 65  DBEs currently e
7d20: 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69 6e  xecuting */.  in
7d30: 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b 20  t writeVdbeCnt; 
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7d50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7d60: 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20 77  VDBEs that are w
7d70: 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  riting */.  int 
7d80: 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20 20  vdbeExecCnt;    
7d90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7da0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
7db0: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
7dc0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  ) */.  int nExte
7dd0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
7de0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7df0: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
7e00: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
7e10: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
7e20: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
7e30: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
7e40: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
7e50: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
7e60: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
7e70: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
7e80: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
7e90: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ec0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
7ed0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7ee0: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
7ef0: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7f00: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
7f10: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
7f20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
7f30: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
7f60: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
7f70: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
7f80: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
7f90: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7fa0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
7fb0: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7fc0: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
7fd0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
7fe0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
7ff0: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8000: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
8010: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
8020: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8030: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
8040: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
8050: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
8060: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
8070: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
8080: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8090: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
80a0: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
80b0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
80c0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
80d0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
80e0: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
80f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8100: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
8110: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
8120: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
8130: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
8140: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
8150: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
8160: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
8170: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
8180: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
8190: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
81a0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
81b0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
81c0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
81d0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
81e0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
81f0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
8200: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
8210: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8220: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8230: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
8240: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
8250: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8260: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8270: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
8280: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
8290: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
82a0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
82b0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
82c0: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
82d0: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
82e0: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
82f0: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
8300: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
8310: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
8320: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
8330: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
8340: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
8350: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
8360: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
8370: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
8380: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
8390: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
83a0: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
83b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
83c0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
83d0: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
83e0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
83f0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8400: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8410: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
8440: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
8450: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8460: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
8470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
8480: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
8490: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
84a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
84b0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
84c0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
84d0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
84e0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
84f0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
8500: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
8510: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
8520: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
8530: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8540: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
8550: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
8560: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
8570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8580: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
8590: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
85a0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
85b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
85c0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
85d0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
8600: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
8610: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
8620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8630: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
8640: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
8650: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
8660: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
8670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8680: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
8690: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
86a0: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
86b0: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
86c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
86d0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
86e0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
86f0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
8700: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
8710: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
8720: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
8730: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
8740: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
8750: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
8760: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
8770: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
8780: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
8790: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
87a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
87b0: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
87c0: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
87d0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
87e0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
87f0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
8800: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
8810: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
8820: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
8830: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
8840: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
8850: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
8860: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8870: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8880: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
8890: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
88a0: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
88b0: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
88c0: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
88d0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
88e0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
88f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8900: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
8910: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
8920: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
8930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8940: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
8950: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
8960: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
8970: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
8980: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
8990: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
89a0: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
89b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
89c0: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
89d0: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
89e0: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
89f0: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
8a00: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
8a10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
8a20: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
8a30: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
8a40: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
8a50: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
8a60: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
8a70: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
8a80: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
8a90: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
8aa0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
8ab0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
8ac0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
8ad0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
8ae0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8af0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
8b00: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
8b10: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
8b20: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
8b30: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8b40: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
8b50: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
8b60: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
8b70: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
8b80: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
8b90: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
8ba0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
8bb0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
8bc0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
8bd0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
8be0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
8bf0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
8c00: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
8c10: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
8c20: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
8c30: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
8c40: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
8c50: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
8c60: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
8c70: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
8c80: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ca0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
8cb0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
8cc0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
8cd0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
8ce0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
8cf0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
8d00: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
8d10: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
8d20: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
8d30: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
8d40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
8d50: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
8d60: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
8d70: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
8d80: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
8d90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
8da0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
8db0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
8dc0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
8dd0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
8de0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
8df0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8e00: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
8e10: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
8e20: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
8e30: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
8e40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
8e50: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
8e60: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
8e70: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
8e80: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
8e90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
8ea0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
8eb0: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
8ec0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
8ed0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
8ee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
8ef0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
8f00: 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77 20  000008  /* Show 
8f10: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
8f20: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
8f30: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8f40: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
8f50: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
8f60: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
8f70: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8fa0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
8fb0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
8fc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8ff0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
9000: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
9010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9020: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
9030: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 49  0x00000020  /* I
9040: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
9050: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
9060: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
9090: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
90a0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
90b0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
90c0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
90d0: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
90e0: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
90f0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
9100: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
9110: 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20  g    0x00000080 
9120: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
9130: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
9140: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
9150: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
9160: 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30 20  a    0x00000100 
9170: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
9180: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
9190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91a0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
91b0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 54  0x00000200  /* T
91c0: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
91d0: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
91e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
91f0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
9200: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 6f  x00000400  /* Do
9210: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
9220: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
9250: 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20 46   0x0000800  /* F
9260: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
9270: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
9280: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
9290: 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30 30  eFmt  0x00001000
92a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
92b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
92c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
92d0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
92e0: 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30 30  c      0x0000200
92f0: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
9300: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9310: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9320: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9330: 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30 20  ync  0x00004000 
9340: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9350: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9360: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9370: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
9380: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
9390: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
93a0: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
93b0: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
93c0: 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30 30  Order   0x000100
93d0: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
93e0: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
93f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9400: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
9410: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
9420: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
9430: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
9440: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
9450: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
9460: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  040000  /* Enfor
9470: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
9480: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
9490: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
94a0: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
94b0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0080000  /* Enab
94c0: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
94d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
94e0: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
94f0: 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30 30  ltin  0x00100000
9500: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
9510: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
9520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9530: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
9540: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
9550: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
9560: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
9570: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
9580: 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30 30  Trigger  0x00400
9590: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
95a0: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
95b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
95c0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
95d0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
95e0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
95f0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9600: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9610: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9620: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9630: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9640: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9650: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9660: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9670: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9680: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9690: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
96a0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
96b0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
96c0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
96d0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
96e0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
96f0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9700: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9710: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9720: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9730: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9740: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9750: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9760: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
9770: 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  ne SQLITE_IdxRea
9780: 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20  lAsInt   0x0010 
9790: 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20    /* Store REAL 
97a0: 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65  as INT in indice
97b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
97c0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
97d0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
97e0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
97f0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
9800: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
9810: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
9820: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
9830: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
9840: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
9850: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
9860: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
9870: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
9880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9890: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
98a0: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
98b0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
98c0: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
98d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98e0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
98f0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
9900: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
9910: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
9920: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
9930: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
9940: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
9950: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
9960: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
9970: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
9980: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9990: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
99a0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
99b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
99c0: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
99d0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
99e0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
99f0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a00: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
9a10: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9a20: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9a30: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
9a40: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
9a50: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9a60: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9a70: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9a80: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9a90: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9aa0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9ab0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9ac0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9ad0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9ae0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9af0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9b00: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9b10: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9b20: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9b30: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9b40: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9b50: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9b60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9b70: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9b80: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9b90: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9ba0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9bb0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9bc0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9bd0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9be0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9bf0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9c00: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9c10: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9c20: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9c30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9c40: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9c50: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9c60: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9c70: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9c80: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9c90: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9ca0: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9cb0: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9cc0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9cd0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9ce0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9cf0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9d00: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9d10: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9d20: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9d30: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9d40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9d50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9d60: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9d70: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9d80: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9d90: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9da0: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9db0: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9dc0: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9dd0: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9de0: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9df0: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9e00: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9e10: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9e20: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9e30: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9e50: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9e60: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9e70: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9e80: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9e90: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9ea0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9eb0: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9ec0: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9ed0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9ee0: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9ef0: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9f00: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9f10: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9f20: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9f30: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9f40: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9f50: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9f60: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9f70: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9f80: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
9f90: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
9fa0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
9fb0: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
9fc0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
9fd0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9fe0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9ff0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a000: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a010: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a020: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a030: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a040: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a050: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a060: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a070: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a080: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a090: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a0a0: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a0b0: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a0c0: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a0d0: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a0e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a0f0: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a100: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a110: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a120: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a130: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a140: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a150: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a160: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a170: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a180: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a190: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a1a0: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a1b0: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a1c0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a1d0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a1e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a1f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a200: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a210: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a220: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a230: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a240: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a250: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a260: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a270: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a280: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a290: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a2a0: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a2b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a2c0: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a2d0: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a2e0: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a2f0: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a300: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a310: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a320: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a330: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a340: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a350: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a360: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a370: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a380: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a390: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a3a0: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a3b0: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a3c0: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a3d0: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a3e0: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a3f0: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a400: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a410: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a420: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a430: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a440: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a450: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a460: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a470: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a480: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a490: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a4a0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a4b0: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a4c0: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a4d0: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a4e0: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a4f0: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a500: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a510: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a520: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a530: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a540: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a550: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a560: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a570: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a580: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a5a0: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a5b0: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a5c0: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a5d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a5e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a5f0: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a600: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a610: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a620: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a630: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a640: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a650: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a660: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a670: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a680: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a690: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a6a0: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a6b0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a6c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a6d0: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a6e0: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a6f0: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a700: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a710: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a720: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a730: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a740: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a750: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a760: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a770: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a780: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a790: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a7a0: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a7b0: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a7c0: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a7d0: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a7e0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a7f0: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a800: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a810: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a820: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a830: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a840: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a850: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a860: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a870: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a880: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a890: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a8a0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a8b0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a8c0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a8d0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a8e0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a8f0: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a900: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a910: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a920: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a930: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a940: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a950: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a960: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a970: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a980: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
a990: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
a9a0: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
a9b0: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
a9c0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
a9d0: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
a9e0: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
a9f0: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
aa00: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
aa10: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
aa20: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
aa30: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aa40: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
aa50: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aa60: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aa70: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aa80: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
aa90: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
aaa0: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
aab0: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
aac0: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
aad0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
aae0: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
aaf0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ab00: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ab10: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ab20: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
ab30: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
ab40: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
ab50: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
ab60: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
ab70: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
ab80: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ab90: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
aba0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
abb0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
abc0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
abd0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
abe0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
abf0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ac00: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ac10: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ac20: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
ac30: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
ac40: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
ac50: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
ac60: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ac70: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ac80: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ac90: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
aca0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
acb0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
acc0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
acd0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ace0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
acf0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ad00: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ad10: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
ad20: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ad30: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
ad40: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ad50: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
ad60: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ad70: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
ad80: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ad90: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ada0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
adb0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
adc0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
add0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ade0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
adf0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ae00: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
ae10: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ae20: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
ae30: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
ae40: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
ae50: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
ae60: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
ae70: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ae80: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
ae90: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
aea0: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
aeb0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
aec0: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
aed0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
aee0: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
aef0: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
af00: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
af10: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
af20: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
af30: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
af40: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
af50: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
af60: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
af70: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
af80: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
af90: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
afa0: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
afb0: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
afc0: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
afd0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
afe0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
aff0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
b000: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
b010: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
b020: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
b030: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
b040: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b050: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b060: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b070: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b0a0: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b0b0: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b0c0: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b0e0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b0f0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b100: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
b110: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
b120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
b130: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
b140: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
b150: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
b160: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
b170: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
b180: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
b190: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
b1a0: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
b1b0: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
b1c0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b1d0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
b1e0: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
b1f0: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
b200: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
b210: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
b220: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
b230: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
b240: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
b250: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
b260: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
b270: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
b280: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
b290: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
b2a0: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
b2b0: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
b2c0: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
b2d0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
b2e0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
b2f0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
b300: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
b310: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
b320: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
b330: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
b340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
b350: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
b360: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
b370: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
b3a0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
b3b0: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
b3c0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
b3d0: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
b3e0: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
b3f0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b400: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
b410: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
b420: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
b430: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
b440: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
b450: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
b460: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
b470: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
b480: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
b490: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
b4a0: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
b4b0: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
b4c0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
b4d0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b4e0: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
b4f0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
b500: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
b510: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
b520: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
b530: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
b540: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
b550: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
b560: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
b570: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
b580: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
b590: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
b5a0: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
b5b0: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
b5c0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
b5d0: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
b5e0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
b5f0: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
b600: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
b610: 65 73 20 2a 2f 0a 20 20 75 31 36 20 63 6f 6c 46  es */.  u16 colF
b620: 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42 6f 6f 6c  lags;    /* Bool
b630: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
b640: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
b650: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
b660: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
b670: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
b680: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
b690: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
b6a0: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
b6b0: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
b6c0: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
b6d0: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
b6e0: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
b6f0: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
b700: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
b710: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
b720: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
b730: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
b740: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
b750: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b760: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
b770: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
b780: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
b790: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
b7a0: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
b7b0: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
b7c0: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
b7d0: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
b7e0: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
b7f0: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
b800: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
b810: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
b820: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
b830: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
b840: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
b850: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
b860: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
b870: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b880: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
b890: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
b8a0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
b8b0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b8c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
b8d0: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
b8e0: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
b8f0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
b900: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
b910: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
b920: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
b930: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
b940: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
b950: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
b960: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
b970: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
b980: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
b990: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
b9a0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
b9b0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
b9c0: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
b9d0: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
b9e0: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
b9f0: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
ba00: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
ba10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ba20: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
ba30: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
ba40: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
ba50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
ba60: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
ba70: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
ba80: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
ba90: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
baa0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
bab0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
bac0: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
bad0: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
bae0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
baf0: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
bb00: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
bb10: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
bb20: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
bb30: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
bb40: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
bb50: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
bb60: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
bb70: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
bb80: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
bb90: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
bba0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
bbb0: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
bbc0: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
bbd0: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
bbe0: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
bbf0: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
bc00: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
bc10: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
bc20: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
bc30: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
bc40: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
bc50: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
bc60: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
bc70: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
bc80: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
bc90: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
bca0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
bcb0: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
bcc0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
bcd0: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
bce0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
bcf0: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
bd00: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
bd10: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
bd20: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
bd30: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
bd40: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
bd50: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
bd60: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
bd70: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
bd80: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
bd90: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
bda0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
bdb0: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
bdc0: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
bdd0: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
bde0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
bdf0: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
be00: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
be10: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
be20: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
be30: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
be40: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
be50: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
be60: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
be70: 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65  affinity..*/.#de
be80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
be90: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
bea0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
beb0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
bec0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
bed0: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
bee0: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
bef0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
bf00: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
bf10: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
bf20: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
bf30: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
bf40: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
bf50: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
bf60: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
bf70: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
bf80: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
bf90: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
bfa0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
bfb0: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
bfc0: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
bfd0: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
bfe0: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
bff0: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
c000: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
c010: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c020: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
c030: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
c040: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
c050: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
c060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c070: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
c080: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
c090: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
c0a0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
c0b0: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
c0c0: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
c0d0: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
c0e0: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
c0f0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
c100: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
c110: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
c120: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c130: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
c140: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
c150: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
c160: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
c170: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
c180: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
c190: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
c1a0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
c1b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
c1c0: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
c1d0: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
c1e0: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
c1f0: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
c200: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
c210: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
c220: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
c230: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
c240: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
c250: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
c260: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
c270: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
c280: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
c290: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
c2a0: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
c2b0: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
c2c0: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
c2d0: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
c2e0: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
c2f0: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
c300: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
c310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
c320: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
c330: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
c340: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
c350: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
c360: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
c370: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
c380: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
c390: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
c3a0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
c3b0: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
c3c0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
c3d0: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
c3e0: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
c3f0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
c400: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
c410: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
c420: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
c430: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
c440: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
c450: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
c460: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
c470: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
c480: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
c490: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
c4a0: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
c4b0: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
c4c0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c4d0: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
c4e0: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
c4f0: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
c500: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
c510: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
c520: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
c530: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
c540: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
c550: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
c560: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
c570: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
c580: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
c590: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
c5a0: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
c5b0: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
c5c0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
c5d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c5e0: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
c5f0: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
c600: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
c610: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
c620: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
c630: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
c640: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
c650: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
c660: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
c670: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
c680: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
c690: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
c6a0: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
c6b0: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
c6c0: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
c6d0: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
c6e0: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
c6f0: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
c700: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
c710: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
c720: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
c730: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
c740: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
c750: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
c760: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
c770: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
c780: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
c790: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
c7a0: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
c7b0: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
c7c0: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
c7d0: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
c7e0: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
c7f0: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
c800: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
c810: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
c820: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
c830: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
c840: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
c850: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
c860: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
c870: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
c880: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
c890: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
c8a0: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
c8b0: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
c8c0: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
c8d0: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
c8e0: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
c8f0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
c900: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
c910: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
c920: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c930: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
c940: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
c950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
c960: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
c970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
c980: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
c990: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
c9a0: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
c9b0: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
c9c0: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
c9d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c9e0: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
c9f0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
ca00: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
ca10: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
ca20: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
ca30: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
ca40: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
ca50: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
ca60: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
ca70: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
ca80: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
ca90: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
caa0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
cab0: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
cac0: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
cad0: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
cae0: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
caf0: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
cb00: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
cb10: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
cb20: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
cb30: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
cb40: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
cb50: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
cb60: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
cb70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
cb80: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
cb90: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
cba0: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
cbb0: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
cbc0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
cbd0: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
cbe0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
cbf0: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
cc00: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
cc10: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
cc20: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
cc30: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
cc40: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
cc50: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
cc60: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
cc70: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
cc80: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
cc90: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
cca0: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
ccb0: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
ccc0: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
ccd0: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
cce0: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
ccf0: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
cd00: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
cd10: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
cd20: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
cd30: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
cd40: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
cd50: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
cd60: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
cd70: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
cd80: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
cd90: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
cda0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cdb0: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
cdc0: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
cdd0: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
cde0: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
cdf0: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
ce00: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
ce10: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
ce20: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
ce30: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
ce40: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
ce50: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
ce60: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
ce70: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
ce80: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
ce90: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
cea0: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
ceb0: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
cec0: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
ced0: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
cee0: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
cef0: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
cf00: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
cf10: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
cf20: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
cf30: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
cf40: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
cf50: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
cf60: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
cf70: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
cf80: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
cf90: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
cfa0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
cfb0: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
cfc0: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
cfd0: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
cfe0: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
cff0: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
d000: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
d010: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
d020: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
d030: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
d040: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
d050: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
d060: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
d070: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
d080: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
d090: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
d0a0: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
d0b0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
d0c0: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
d0d0: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
d0e0: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
d0f0: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
d100: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d110: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
d120: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
d130: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
d140: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
d150: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
d160: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
d170: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
d180: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
d190: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
d1a0: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
d1b0: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
d1c0: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
d1d0: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
d1e0: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
d1f0: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
d200: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
d210: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
d220: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
d230: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
d240: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
d250: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
d260: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
d270: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
d280: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
d290: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d2a0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
d2b0: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
d2c0: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
d2d0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
d2e0: 64 69 66 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52  dif.  tRowcnt nR
d2f0: 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a 20 45 73  owEst;     /* Es
d300: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
d310: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
d320: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
d330: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
d340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
d350: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
d360: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
d370: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
d380: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
d390: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
d3a0: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
d3b0: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
d3c0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
d3d0: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
d3e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d3f0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
d400: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d410: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
d420: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d430: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
d440: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 38  is Table */.  u8
d450: 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
d460: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
d470: 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
d480: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
d490: 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
d4a0: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
d4b0: 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
d4c0: 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
d4d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d4e0: 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
d4f0: 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
d500: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
d510: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
d520: 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
d530: 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
d540: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d550: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d560: 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
d570: 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
d580: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
d590: 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
d5a0: 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
d5b0: 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f  eArg;  /* Text o
d5c0: 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67  f all module arg
d5d0: 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65  s. [0] is module
d5e0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c   name */.  VTabl
d5f0: 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
d600: 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
d610: 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
d620: 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
d630: 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
d640: 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
d650: 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
d660: 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
d670: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
d680: 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
d690: 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
d6a0: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
d6b0: 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
d6c0: 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
d6d0: 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
d6e0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
d6f0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
d700: 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a  be.tabFlags..*/.
d710: 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
d720: 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20  nly        0x01 
d730: 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
d740: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
d750: 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
d760: 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20  eral       0x02 
d770: 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
d780: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
d790: 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
d7a0: 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f  yKey   0x04    /
d7b0: 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
d7c0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
d7d0: 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
d7e0: 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20  ement   0x08    
d7f0: 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
d800: 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
d810: 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
d820: 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20  ne TF_Virtual   
d830: 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
d840: 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   Is a virtual ta
d850: 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ble */.../*.** T
d860: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
d870: 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
d880: 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
d890: 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
d8a0: 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
d8b0: 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
d8c0: 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
d8d0: 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
d8e0: 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
d8f0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d900: 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
d910: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d920: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
d930: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
d940: 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
d950: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
d960: 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20  _Virtual)!=0).# 
d970: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
d980: 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
d990: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
d9a0: 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
d9b0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
d9c0: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
d9d0: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
d9e0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
d9f0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
da00: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
da10: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
da20: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
da30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
da40: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
da50: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
da60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
da70: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
da80: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
da90: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
daa0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
dab0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
dac0: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
dad0: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
dae0: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
daf0: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
db00: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
db10: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
db20: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
db30: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
db40: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
db50: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
db60: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
db70: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
db80: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
db90: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
dba0: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
dbb0: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
dbc0: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
dbd0: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
dbe0: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
dbf0: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
dc00: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20  is "ex2"..**.** 
dc10: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
dc20: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
dc30: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
dc40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
dc50: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
dc60: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
dc70: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
dc80: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
dc90: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
dca0: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
dcb0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
dcc0: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
dcd0: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
dce0: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
dcf0: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
dd00: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
dd10: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
dd20: 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
dd30: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
dd40: 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
dd50: 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
dd60: 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67    /* Next foreig
dd70: 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a  n key in pFrom *
dd80: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
dd90: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
dda0: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
ddb0: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
ddc0: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
ddd0: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
dde0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69     /* Next forei
ddf0: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
de00: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46  named zTo */.  F
de10: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
de20: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72   /* Previous for
de30: 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c  eign key on tabl
de40: 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20  e named zTo */. 
de50: 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
de60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
de70: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
de80: 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
de90: 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
dea0: 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
deb0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
dec0: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
ded0: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
dee0: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
def0: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
df00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44           /* ON D
df10: 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
df20: 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
df30: 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
df40: 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
df50: 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65  r[2];  /* Trigge
df60: 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
df70: 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
df80: 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
df90: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
dfa0: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
dfb0: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
dfc0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
dfd0: 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  m;         /* In
dfe0: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
dff0: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
e000: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
e010: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
e020: 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30  mn in zTo.  If 0
e030: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
e040: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
e050: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
e060: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
e070: 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a   nCol column s *
e080: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
e090: 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
e0a0: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
e0b0: 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
e0c0: 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
e0d0: 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
e0e0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
e0f0: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
e100: 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
e110: 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
e120: 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
e130: 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
e140: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
e150: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
e160: 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
e170: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e180: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
e190: 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
e1a0: 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
e1b0: 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
e1c0: 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
e1d0: 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
e1e0: 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
e1f0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
e200: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
e210: 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
e220: 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
e230: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
e240: 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
e250: 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
e260: 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
e270: 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
e280: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
e290: 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
e2a0: 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
e2b0: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
e2c0: 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
e2d0: 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
e2e0: 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
e2f0: 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
e300: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
e310: 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
e320: 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
e330: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
e340: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
e350: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
e360: 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
e370: 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
e380: 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
e390: 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
e3a0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
e3b0: 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
e3c0: 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
e3d0: 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
e3e0: 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
e3f0: 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
e400: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
e410: 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
e420: 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
e430: 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
e440: 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
e450: 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
e460: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
e470: 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
e480: 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
e490: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
e4a0: 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
e4b0: 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
e4c0: 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
e4d0: 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
e4e0: 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
e4f0: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
e500: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
e510: 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
e520: 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
e530: 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
e540: 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
e550: 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
e560: 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
e570: 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
e580: 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
e590: 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
e5a0: 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
e5b0: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
e5c0: 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
e5d0: 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
e5e0: 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
e5f0: 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
e600: 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
e610: 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
e620: 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
e630: 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
e640: 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
e650: 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
e660: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
e670: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
e680: 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
e690: 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
e6a0: 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
e6b0: 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
e6c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
e6d0: 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
e6e0: 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
e6f0: 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
e700: 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
e710: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
e720: 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
e730: 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
e740: 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
e750: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
e760: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
e770: 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
e780: 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
e790: 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
e7a0: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
e7b0: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
e7c0: 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
e7d0: 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
e7e0: 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
e7f0: 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
e800: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e810: 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
e820: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e830: 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
e840: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e850: 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
e860: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e870: 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
e880: 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
e890: 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
e8a0: 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
e8b0: 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
e8c0: 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
e8d0: 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  99  /* Do whatev
e8e0: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
e8f0: 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
e900: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
e910: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e920: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
e930: 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
e940: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
e950: 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
e960: 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
e970: 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
e980: 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
e990: 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
e9a0: 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63  x keys..*/.struc
e9b0: 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71  t KeyInfo {.  sq
e9c0: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
e9d0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
e9e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
e9f0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
ea00: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
ea10: 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
ea20: 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
ea30: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
ea40: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
ea50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
ea60: 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20  ries in aColl[] 
ea70: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
ea80: 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
ea90: 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
eaa0: 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20  column.  May be 
eab0: 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  NULL */.  CollSe
eac0: 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
ead0: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
eae0: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
eaf0: 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
eb00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
eb10: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
eb20: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
eb30: 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
eb40: 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69  on about a.** si
eb50: 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72  ngle index recor
eb60: 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
eb70: 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  dy been parsed o
eb80: 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
eb90: 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  al.** values..**
eba0: 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
ebb0: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
ebc0: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
ebd0: 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
ebe0: 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
ebf0: 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
ec00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ec10: 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
ec20: 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
ec30: 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
ec40: 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
ec50: 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
ec60: 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
ec70: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
ec80: 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
ec90: 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
eca0: 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
ecb0: 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
ecc0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  de..**.** This s
ecd0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61  tructure holds a
ece0: 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
ecf0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69   already been di
ed00: 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e  sassembled.** in
ed10: 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65  to its constitue
ed20: 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74  nt fields..*/.st
ed30: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
ed40: 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
ed50: 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
ed60: 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
ed70: 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
ed80: 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ion */.  u16 nFi
ed90: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
eda0: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
edb0: 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
edc0: 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20    u8 flags;     
edd0: 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e        /* Boolean
ede0: 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41   settings.  UNPA
edf0: 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a  CKED_... below *
ee00: 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
ee10: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
ee20: 62 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  by UNPACKED_PREF
ee30: 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d  IX_SEARCH */.  M
ee40: 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
ee50: 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
ee60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
ee70: 64 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61  d values of Unpa
ee80: 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73  ckedRecord.flags
ee90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41  .*/.#define UNPA
eea0: 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20  CKED_INCRKEY    
eeb0: 20 20 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65     0x01  /* Make
eec0: 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73   this key an eps
eed0: 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23  ilon larger */.#
eee0: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
eef0: 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78  PREFIX_MATCH  0x
ef00: 30 32 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20  02  /* A prefix 
ef10: 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65  match is conside
ef20: 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e  red OK */.#defin
ef30: 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  e UNPACKED_PREFI
ef40: 58 5f 53 45 41 52 43 48 20 30 78 30 34 20 20 2f  X_SEARCH 0x04  /
ef50: 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28  * Ignore final (
ef60: 72 6f 77 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a  rowid) field */.
ef70: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ef80: 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
ef90: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
efa0: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
efb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
efc0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
efd0: 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
efe0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
eff0: 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
f000: 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
f010: 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
f020: 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
f030: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
f040: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
f050: 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
f060: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
f070: 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
f080: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
f090: 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
f0a0: 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
f0b0: 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
f0c0: 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
f0d0: 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
f0e0: 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
f0f0: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
f100: 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
f110: 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
f120: 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
f130: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
f140: 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
f150: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
f160: 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
f170: 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
f180: 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
f190: 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
f1a0: 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
f1b0: 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
f1c0: 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
f1d0: 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
f1e0: 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
f1f0: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
f200: 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
f210: 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
f220: 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
f230: 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
f240: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
f250: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
f260: 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
f270: 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
f280: 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
f290: 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
f2a0: 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
f2b0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
f2c0: 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
f2d0: 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
f2e0: 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
f2f0: 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
f300: 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
f310: 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
f320: 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
f330: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
f340: 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
f350: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
f360: 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
f370: 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
f380: 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
f390: 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
f3a0: 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
f3b0: 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
f3c0: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
f3d0: 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
f3e0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
f3f0: 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
f400: 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
f410: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
f420: 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
f430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
f440: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
f450: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  ndex */.  int *a
f460: 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
f470: 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
f480: 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
f490: 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
f4a0: 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63   is 0 */.  tRowc
f4b0: 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
f4c0: 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
f4d0: 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
f4e0: 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
f4f0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
f500: 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
f510: 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
f520: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
f530: 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
f540: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
f550: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
f560: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
f570: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
f580: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
f590: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
f5a0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
f5b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
f5c0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
f5d0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
f5e0: 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
f5f0: 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
f600: 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
f610: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
f620: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
f630: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
f640: 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
f650: 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
f660: 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
f670: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
f680: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
f690: 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
f6a0: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  dex */.  int tnu
f6b0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
f6c0: 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
f6d0: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f6e0: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f6f0: 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
f700: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f710: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
f720: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
f730: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f740: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f750: 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
f760: 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
f770: 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
f780: 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
f790: 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32  gned autoIndex:2
f7a0: 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55  ;    /* 1==UNIQU
f7b0: 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
f7c0: 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
f7d0: 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
f7e0: 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
f7f0: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f800: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f810: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f820: 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
f830: 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
f840: 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
f850: 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
f860: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66  l columns */.#if
f870: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
f880: 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e 53  E_STAT3.  int nS
f890: 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
f8a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f8b0: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
f8c0: 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77 63  ple[] */.  tRowc
f8d0: 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20 20  nt avgEq;       
f8e0: 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
f8f0: 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79  Eq value for key
f900: 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20 61   values not in a
f910: 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
f920: 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
f930: 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
f940: 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
f950: 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
f960: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
f970: 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
f980: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
f990: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
f9a0: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
f9b0: 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
f9c0: 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
f9d0: 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
f9e0: 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
f9f0: 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
fa00: 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
fa10: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fa20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fa30: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
fa40: 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  le {.  union {. 
fa50: 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20     char *z;     
fa60: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fa70: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 54  Type is SQLITE_T
fa80: 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42 4c  EXT or SQLITE_BL
fa90: 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  OB */.    double
faa0: 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c   r;       /* Val
fab0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fac0: 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20  QLITE_FLOAT */. 
fad0: 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20     i64 i;       
fae0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
faf0: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 49  Type is SQLITE_I
fb00: 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b  NTEGER */.  } u;
fb10: 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
fb20: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
fb30: 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45  ULL, SQLITE_INTE
fb40: 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a  GER ... etc. */.
fb50: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
fb60: 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62      /* Size in b
fb70: 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62  yte of text or b
fb80: 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  lob. */.  tRowcn
fb90: 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20 45  t nEq;      /* E
fba0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
fbb0: 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
fbc0: 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
fbd0: 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
fbe0: 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45 73   nLt;      /* Es
fbf0: 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
fc00: 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
fc10: 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
fc20: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
fc30: 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20 45  t nDLt;     /* E
fc40: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
fc50: 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
fc60: 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
fc70: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
fc80: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
fc90: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
fca0: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
fcb0: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
fcc0: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
fcd0: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
fce0: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
fcf0: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
fd00: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
fd10: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
fd20: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
fd30: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
fd40: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
fd50: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
fd60: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
fd70: 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
fd80: 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
fd90: 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
fda0: 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
fdb0: 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
fdc0: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
fdd0: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
fde0: 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
fdf0: 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
fe00: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
fe10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fe20: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
fe30: 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
fe40: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
fe50: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
fe60: 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
fe70: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
fe80: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
fe90: 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
fea0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
feb0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
fec0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
fed0: 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
fee0: 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
fef0: 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
ff00: 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
ff10: 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
ff20: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
ff30: 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
ff40: 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
ff50: 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
ff60: 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
ff70: 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
ff80: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
ff90: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
ffa0: 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
ffb0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
ffc0: 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
ffd0: 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
ffe0: 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
fff0: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
10000 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
10010 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
10020 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
10030 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
10040 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
10050 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
10060 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
10070 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
10080 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
10090 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
100a0 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
100b0 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
100c0 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
100d0 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
100e0 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
100f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10100 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
10110 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
10120 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
10130 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
10140 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
10150 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
10160 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
10170 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
10180 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
10190 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
101a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
101b0 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
101c0 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
101d0 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
101e0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
101f0 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
10200 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
10210 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
10220 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
10230 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
10240 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
10250 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
10260 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10270 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
10280 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10290 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
102a0 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
102b0 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
102c0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
102d0 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
102e0 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
102f0 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
10300 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
10310 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
10320 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
10330 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
10340 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
10350 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
10360 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
10370 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10380 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
10390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
103a0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
103b0 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
103c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
103d0 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
103e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
103f0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
10400 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
10410 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10430 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10440 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10450 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
10460 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10470 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
10480 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
10490 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
104a0 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
104b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
104c0 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
104d0 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
104e0 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
104f0 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
10500 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10510 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
10520 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
10530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10540 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
10550 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
10560 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
10570 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
105a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
105b0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
105c0 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
105d0 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
105e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
105f0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10610 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
10620 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
10630 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
10640 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
10650 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
10660 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
10670 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
10680 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
10690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
106a0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
106b0 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
106c0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
106d0 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
106e0 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
106f0 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
10700 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
10710 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
10720 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
10730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10740 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
10750 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
10760 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
10770 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
10780 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
10790 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
107a0 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
107b0 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
107c0 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
107d0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
107e0 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
107f0 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
10800 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
10810 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
10820 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
10830 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
10840 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
10850 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
10860 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
10870 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
10880 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
10890 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
108a0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
108b0 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
108c0 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
108d0 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
108e0 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
108f0 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
10900 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
10910 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
10920 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
10930 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
10940 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
10950 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
10960 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
10970 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
10980 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
10990 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
109a0 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
109b0 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
109c0 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
109d0 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
109e0 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
109f0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
10a00 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
10a10 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
10a20 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
10a30 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
10a40 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
10a50 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
10a60 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
10a70 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
10a80 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
10a90 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
10aa0 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
10ab0 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
10ac0 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
10ad0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10ae0 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
10af0 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
10b00 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
10b10 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
10b20 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
10b30 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
10b40 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
10b50 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
10b60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10b70 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10b80 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
10b90 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
10ba0 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
10bb0 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
10bc0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10bd0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
10be0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
10bf0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
10c00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
10c10 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
10c20 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
10c30 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10c40 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
10c50 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
10c60 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10c70 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10c80 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
10c90 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
10ca0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10cb0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
10cc0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
10cd0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
10ce0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
10cf0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
10d00 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
10d10 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
10d20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
10d30 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
10d40 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
10d50 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
10d60 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
10d70 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10d80 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10d90 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
10da0 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
10db0 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
10dc0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
10dd0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
10de0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
10df0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
10e00 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10e10 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
10e20 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
10e30 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
10e40 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
10e50 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
10e60 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
10e70 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
10e80 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
10e90 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
10ea0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
10eb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
10ec0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
10ed0 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
10ee0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
10ef0 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
10f00 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
10f10 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
10f20 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
10f30 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
10f40 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
10f50 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
10f60 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
10f70 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
10f80 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
10f90 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
10fa0 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
10fb0 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
10fc0 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
10fd0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
10fe0 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
10ff0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
11000 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
11010 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
11020 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
11030 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
11040 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
11050 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
11060 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
11070 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
11080 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
11090 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
110a0 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
110b0 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
110c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
110d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
110e0 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
110f0 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
11100 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
11110 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
11120 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
11130 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
11140 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
11150 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
11160 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
11170 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11180 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11190 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
111a0 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
111b0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
111c0 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
111d0 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
111e0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
111f0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
11200 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
11210 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
11220 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
11230 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
11240 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
11250 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
11260 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
11270 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
11280 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
11290 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
112a0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
112b0 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
112c0 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
112d0 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
112e0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
112f0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
11300 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
11310 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
11320 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
11330 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
11340 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
11350 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
11360 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
11370 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
11380 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
11390 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
113a0 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
113b0 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
113c0 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
113d0 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
113e0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
113f0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
11400 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
11410 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
11420 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
11430 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
11440 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
11450 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11460 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11470 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
11480 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
11490 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
114a0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
114b0 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
114c0 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
114d0 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
114e0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
114f0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
11500 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
11510 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
11520 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
11530 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
11540 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
11550 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
11560 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
11570 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
11580 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
11590 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
115a0 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
115b0 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
115c0 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
115d0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
115e0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
115f0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
11600 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
11610 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
11620 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
11630 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
11640 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
11650 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
11660 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
11670 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
11680 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
11690 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
116a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
116b0 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
116c0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
116d0 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
116e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
116f0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
11700 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
11710 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
11720 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
11730 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
11740 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
11750 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
11760 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
11770 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
11780 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
11790 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
117a0 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
117b0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
117c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
117d0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
117e0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
117f0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
11800 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
11810 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
11820 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
11830 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
11840 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
11850 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
11860 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
11870 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
11880 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
11890 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
118a0 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
118b0 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
118c0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
118d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11910 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
11920 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
11930 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
11940 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
11950 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
11960 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
11970 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
11980 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
11990 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
119a0 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20  arguments or in 
119b0 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70  "<expr> IN (<exp
119c0 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20 20  r-list)" */.    
119d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
119e0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
119f0 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
11a00 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
11a10 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78  lect>)" */.  } x
11a20 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
11a30 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
11a40 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11a50 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11a60 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11a70 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11a80 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11a90 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11aa0 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11ab0 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11ac0 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11ad0 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11ae0 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
11af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11b30 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
11b40 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
11b50 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
11b60 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
11b70 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
11b80 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
11b90 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
11ba0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
11bb0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
11bc0 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
11bd0 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
11be0 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c00 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
11c10 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
11c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c30 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11c40 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
11c50 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20  w, 0 -> old */. 
11c60 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
11c70 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11c80 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
11c90 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
11ca0 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11cc0 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
11cd0 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
11ce0 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
11cf0 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
11d00 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11d10 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
11d20 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
11d30 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
11d40 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
11d50 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
11d60 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
11d70 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
11d80 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32  n */.  u8 flags2
11d90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11da0 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66   Second set of f
11db0 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a  lags.  EP2_... *
11dc0 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
11dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11de0 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
11df0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
11e00 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11e20 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
11e30 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
11e40 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
11e70 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
11e80 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
11e90 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
11ea0 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
11eb0 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
11ec0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
11ed0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
11ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
11ef0 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
11f00 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
11f10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11f20 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
11f30 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
11f40 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
11f50 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11f60 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
11f70 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
11f80 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
11f90 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
11fa0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
11fb0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
11fc0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
11fd0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
11fe0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
11ff0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
12000 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
12010 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
12020 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
12030 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
12040 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
12050 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
12060 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
12070 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
12080 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
12090 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
120a0 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
120b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
120c0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
120d0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
120e0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
120f0 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
12100 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
12110 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
12120 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
12130 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
12140 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
12150 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
12160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12170 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
12180 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
12190 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
121a0 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
121b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
121c0 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30 30  ollate    0x0100
121d0 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69    /* Tree contai
121e0 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
121f0 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66  opeartor */.#def
12200 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74  ine EP_FixedDest
12210 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73    0x0200  /* Res
12220 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20  ult needed in a 
12230 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65  specific registe
12240 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
12250 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30  IntValue   0x040
12260 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  0  /* Integer va
12270 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12280 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
12290 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
122a0 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e  t  0x0800  /* x.
122b0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
122c0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
122d0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
122e0 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20  ne EP_Hint      
122f0 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20   0x1000  /* Not 
12300 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
12310 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
12320 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  2000  /* Expr st
12330 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45 44  ruct is EXPR_RED
12340 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
12350 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
12360 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34  P_TokenOnly  0x4
12370 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72  000  /* Expr str
12380 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45  uct is EXPR_TOKE
12390 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
123a0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
123b0 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30 78  EP_Static     0x
123c0 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e  8000  /* Held in
123d0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
123e0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
123f0 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  () */../*.** The
12400 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
12410 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
12420 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
12430 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f  flags2 field..*/
12440 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c  .#define EP2_Mal
12450 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30  locedToken  0x00
12460 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  01  /* Need to s
12470 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12480 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
12490 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75  efine EP2_Irredu
124a0 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32 20  cible    0x0002 
124b0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
124c0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
124d0 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  xpr */../*.** Th
124e0 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65  e pseudo-routine
124f0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 49   sqlite3ExprSetI
12500 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73 20  rreducible sets 
12510 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  the EP2_Irreduci
12520 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61  ble.** flag on a
12530 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  n expression str
12540 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c  ucture.  This fl
12550 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ag is used for V
12560 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a  V&A only.  The.*
12570 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  * routine is imp
12580 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61  lemented as a ma
12590 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f  cro that only wo
125a0 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75  rks when in debu
125b0 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73  gging mode,.** s
125c0 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64  o as not to burd
125d0 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f  en production co
125e0 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  de..*/.#ifdef SQ
125f0 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
12600 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
12610 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e  ucible(X)  (X)->
12620 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72  flags2 |= EP2_Ir
12630 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a  reducible.#else.
12640 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
12650 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23  Irreducible(X).#
12660 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
12670 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12680 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12690 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
126a0 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
126b0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
126c0 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
126d0 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
126e0 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
126f0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
12700 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f  ne ExprHasAnyPro
12710 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
12720 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
12730 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
12740 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
12750 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12760 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12770 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12780 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12790 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ~(P)../*.** Macr
127a0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
127b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
127c0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
127d0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
127e0 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
127f0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
12800 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
12810 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
12820 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
12830 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
12840 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
12850 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
12860 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
12870 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
12880 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
12890 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
128a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
128b0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
128c0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
128d0 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
128e0 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
128f0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
12900 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
12910 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12920 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
12930 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
12940 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
12950 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
12960 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
12970 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
12980 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
12990 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
129a0 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
129b0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
129c0 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
129d0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
129e0 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
129f0 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
12a00 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
12a10 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
12a20 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
12a30 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
12a40 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
12a50 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
12a60 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
12a70 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
12a80 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
12a90 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
12aa0 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
12ab0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
12ac0 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
12ad0 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
12ae0 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
12af0 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
12b00 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12b10 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
12b20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12b30 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
12b40 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
12b50 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
12b60 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
12b70 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
12b80 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
12b90 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
12ba0 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
12bb0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
12bc0 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
12bd0 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
12be0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
12bf0 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
12c00 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
12c10 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
12c20 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
12c30 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
12c40 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
12c50 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
12c60 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
12c70 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
12c80 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
12c90 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
12ca0 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
12cb0 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
12cc0 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
12cd0 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
12ce0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
12cf0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
12d00 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
12d10 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
12d20 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
12d30 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
12d40 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
12d50 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
12d60 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
12d70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
12d80 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12d90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
12da0 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
12db0 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
12dc0 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
12dd0 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
12de0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12df0 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
12e00 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
12e10 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
12e20 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
12e30 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
12e40 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
12e50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12e60 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
12e70 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
12e80 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12e90 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12ea0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12eb0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
12ec0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
12ed0 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
12ee0 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
12ef0 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
12f00 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
12f10 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
12f20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
12f30 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
12f40 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
12f50 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
12f60 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
12f70 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
12f80 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
12f90 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
12fa0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
12fb0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
12fc0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
12fd0 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
12fe0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
12ff0 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
13000 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
13010 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
13020 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
13030 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
13040 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
13050 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13060 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13070 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13080 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13090 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
130a0 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
130b0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
130c0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
130d0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
130e0 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
130f0 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
13100 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
13110 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
13120 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
13130 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
13140 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
13150 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13160 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13170 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13180 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13190 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
131a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
131b0 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
131c0 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
131d0 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
131e0 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
131f0 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
13200 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
13210 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
13220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
13230 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
13240 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
13250 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13260 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13270 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13280 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13290 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
132a0 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
132b0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
132c0 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
132d0 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
132e0 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
132f0 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
13300 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
13310 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
13320 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
13330 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
13340 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
13350 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13360 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13370 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13380 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13390 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
133a0 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
133b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
133c0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
133d0 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
133e0 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
133f0 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
13400 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
13410 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
13420 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
13430 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
13440 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
13450 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13460 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13470 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13480 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
13490 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
134a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
134b0 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
134c0 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
134d0 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
134e0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
134f0 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
13500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
13510 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
13520 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
13530 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
13540 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
13550 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
13560 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
13570 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
13580 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
13590 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
135a0 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
135b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
135c0 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
135d0 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
135e0 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
135f0 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
13600 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
13610 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
13620 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
13630 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
13640 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
13650 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
13660 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
13670 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
13680 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
13690 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
136a0 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
136b0 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
136c0 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
136d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
136e0 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
136f0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
13700 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
13710 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13720 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
13730 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
13740 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
13750 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13760 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13770 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13780 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13790 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
137a0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
137b0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
137c0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
137d0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
137e0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
137f0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
13800 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
13810 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
13820 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
13830 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
13840 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
13850 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13860 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13870 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13880 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13890 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
138a0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
138b0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
138c0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
138d0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
138e0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
138f0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13900 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13910 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13920 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13930 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13940 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13950 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13960 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13970 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13980 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13990 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
139a0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
139b0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
139c0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
139d0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
139e0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
139f0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13a00 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13a10 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13a20 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13a30 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13a40 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13a50 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13a60 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13a70 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13a80 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13a90 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13aa0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13ab0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13ac0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13ad0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13ae0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13af0 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
13b00 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
13b10 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
13b20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
13b30 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13b40 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
13b50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13b60 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13b70 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13b80 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13b90 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13ba0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13bb0 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13bc0 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13bd0 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13be0 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13bf0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13c00 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13c10 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13c20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13c30 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13c40 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13c50 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13c60 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13c70 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13c80 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13c90 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13ca0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13cb0 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13cc0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13cd0 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13ce0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13cf0 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13d00 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13d10 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13d20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13d30 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13d40 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13d50 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13d60 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13d70 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13d80 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13d90 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13da0 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13db0 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13dc0 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13dd0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13de0 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13df0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13e00 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13e10 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13e20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13e30 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13e40 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13e50 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
13e60 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
13e70 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
13e80 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
13e90 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
13ea0 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
13eb0 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
13ec0 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
13ed0 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
13ee0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
13ef0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
13f00 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
13f10 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
13f20 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
13f30 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
13f40 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
13f50 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
13f60 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13f70 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
13f80 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
13f90 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
13fa0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
13fb0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
13fc0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
13fd0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
13fe0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
13ff0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
14000 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
14010 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
14020 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
14030 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
14040 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
14050 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14060 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14070 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14080 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14090 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
140a0 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
140b0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
140c0 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
140d0 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
140e0 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
140f0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14100 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
14110 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
14120 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
14130 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
14140 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
14150 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14160 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14170 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14180 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14190 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
141a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
141b0 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
141c0 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
141d0 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
141e0 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
141f0 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
14200 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
14210 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
14220 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
14230 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
14240 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
14250 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14260 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14270 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14280 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14290 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
142a0 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
142b0 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
142c0 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
142d0 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
142e0 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
142f0 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
14300 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
14310 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
14320 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  .../*.** Flags a
14330 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
14340 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
14350 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14360 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14370 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14380 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14390 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
143a0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
143b0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
143c0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
143d0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
143e0 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
143f0 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
14400 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
14410 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
14420 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14430 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
14440 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14450 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14460 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14470 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
14480 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
14490 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
144a0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
144b0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
144c0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
144d0 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
144e0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
144f0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
14500 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
14510 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
14520 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
14530 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
14540 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
14550 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
14560 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
14570 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
14580 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
14590 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
145a0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
145b0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
145c0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
145d0 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
145e0 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
145f0 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
14600 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
14610 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
14620 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
14630 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
14640 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
14650 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a         0x0100 /*
14660 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
14670 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
14680 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14690 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
146a0 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65   0x0200 /* pOrde
146b0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
146c0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
146d0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
146e0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
146f0 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20    0x0400 /* All 
14700 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
14710 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a  be distinct */..
14720 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
14730 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
14740 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
14750 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
14760 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
14770 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
14780 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
14790 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
147a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
147b0 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
147c0 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
147d0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
147e0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
147f0 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
14800 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
14810 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
14820 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
14830 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
14840 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
14850 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
14860 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
14870 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
14880 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
14890 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
148a0 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
148b0 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
148c0 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
148d0 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
148e0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
148f0 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
14900 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
14910 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
14920 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
14930 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
14940 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
14950 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
14960 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
14970 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
14980 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
14990 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
149a0 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
149b0 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
149c0 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
149d0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
149e0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
149f0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
14a00 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
14a10 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
14a20 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
14a30 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
14a40 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
14a50 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
14a60 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
14a70 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
14a80 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
14a90 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
14aa0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
14ab0 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
14ac0 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
14ad0 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
14ae0 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
14af0 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
14b00 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
14b10 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
14b20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
14b30 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
14b40 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
14b50 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
14b60 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
14b70 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
14b80 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
14b90 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
14ba0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
14bb0 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
14bc0 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
14bd0 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
14be0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
14bf0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
14c00 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14c10 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
14c20 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
14c30 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
14c40 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
14c50 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
14c60 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
14c70 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
14c80 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
14c90 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
14ca0 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
14cb0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
14cc0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
14cd0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
14ce0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
14cf0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
14d00 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
14d10 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
14d20 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
14d30 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
14d40 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
14d50 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
14d60 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
14d70 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  ions */.  AggInf
14d80 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
14d90 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
14da0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
14db0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
14dc0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
14dd0 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
14de0 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
14df0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
14e00 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
14e10 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
14e20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
14e30 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
14e40 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
14e50 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
14e60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14e70 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
14e80 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
14e90 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
14ea0 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
14eb0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
14ec0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
14ed0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
14ee0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
14ef0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
14f00 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
14f10 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
14f20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
14f30 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
14f40 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
14f50 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
14f60 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
14f70 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
14f80 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
14f90 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
14fa0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
14fb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
14fc0 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
14fd0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
14fe0 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
14ff0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
15000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
15010 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
15020 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
15030 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
15040 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
15050 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 73 4d  /.#define NC_AsM
15060 61 79 62 65 20 20 20 30 78 31 30 20 20 20 20 2f  aybe   0x10    /
15070 2a 20 52 65 73 6f 6c 76 65 20 74 6f 20 41 53 20  * Resolve to AS 
15080 74 65 72 6d 73 20 6f 66 20 74 68 65 20 72 65 73  terms of the res
15090 75 6c 74 20 73 65 74 20 6f 6e 6c 79 0a 20 20 20  ult set only.   
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 66 20            ** if 
150c0 6e 6f 20 6f 74 68 65 72 20 72 65 73 6f 6c 75 74  no other resolut
150d0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
150e0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
150f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
15100 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
15110 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
15120 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
15130 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
15140 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
15150 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
15160 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
15170 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
15180 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
15190 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
151a0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
151b0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
151c0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
151d0 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
151e0 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
151f0 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
15200 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
15210 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
15220 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
15230 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
15240 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
15250 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
15260 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
15270 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
15280 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
15290 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
152a0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
152b0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
152c0 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
152d0 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
152e0 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
152f0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
15300 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
15310 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
15320 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
15330 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
15340 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
15350 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
15360 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
15370 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
15380 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
15390 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
153a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
153b0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
153c0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
153d0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
153e0 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
153f0 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
15400 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
15410 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
15420 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
15430 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
15440 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
15450 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
15460 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
15470 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
15480 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
15490 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
154a0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
154b0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
154c0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
154d0 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
154e0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
154f0 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
15500 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
15510 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
15520 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
15530 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
15540 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
15550 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
15560 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
15570 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
15580 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
15590 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
155a0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
155b0 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
155c0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
155d0 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
155e0 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
155f0 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
15600 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
15610 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
15620 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
15630 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
15640 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[3];   /* OP_O
15650 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
15660 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
15670 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
15680 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
15690 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
156a0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
156b0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
156c0 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
156d0 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
156e0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
156f0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
15700 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
15710 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
15720 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
15730 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
15740 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
15750 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
15760 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
15770 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
15780 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
15790 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
157a0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
157b0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
157c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
157d0 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
157e0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
157f0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
15800 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
15810 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
15820 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
15830 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
15840 20 20 53 65 6c 65 63 74 20 2a 70 52 69 67 68 74    Select *pRight
15850 6d 6f 73 74 3b 20 20 20 20 2f 2a 20 52 69 67 68  most;    /* Righ
15860 74 2d 6d 6f 73 74 20 73 65 6c 65 63 74 20 69 6e  t-most select in
15870 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
15880 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
15890 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
158a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
158b0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
158c0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
158d0 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
158e0 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
158f0 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
15900 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
15910 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 7d 3b 0a  not used. */.};.
15920 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
15930 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
15940 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
15950 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
15960 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
15970 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66  t Flag"..*/.#def
15980 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
15990 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
159a0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
159b0 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
159c0 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
159d0 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32  ed        0x0002
159e0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
159f0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
15a00 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
15a10 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
15a20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e    0x0004  /* Con
15a30 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
15a40 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
15a50 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
15a60 6d 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20  meral   0x0008  
15a70 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
15a80 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
15a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
15aa0 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30  xpanded        0
15ab0 78 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65  x0010  /* sqlite
15ac0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
15ad0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
15ae0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
15af0 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30  TypeInfo     0x0
15b00 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  020  /* FROM sub
15b10 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
15b20 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
15b30 64 65 66 69 6e 65 20 53 46 5f 55 73 65 53 6f 72  define SF_UseSor
15b40 74 65 72 20 20 20 20 20 20 20 30 78 30 30 34 30  ter       0x0040
15b50 20 20 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20    /* Sort using 
15b60 61 20 73 6f 72 74 65 72 20 2a 2f 0a 23 64 65 66  a sorter */.#def
15b70 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
15b80 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
15b90 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
15ba0 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
15bb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
15bc0 61 74 65 72 69 61 6c 69 7a 65 20 20 20 20 20 30  aterialize     0
15bd0 78 30 31 30 30 20 20 2f 2a 20 46 6f 72 63 65 20  x0100  /* Force 
15be0 6d 61 74 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20  materialization 
15bf0 6f 66 20 76 69 65 77 73 20 2a 2f 0a 23 64 65 66  of views */.#def
15c00 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
15c10 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  m      0x0200  /
15c20 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
15c30 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
15c40 6c 61 75 73 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  lause */.../*.**
15c50 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
15c60 61 20 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20  a select can be 
15c70 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
15c80 65 76 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68  everal ways.  Th
15c90 65 0a 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69  e.** "SRT" prefi
15ca0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
15cb0 52 65 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f  Result Type"..*/
15cc0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
15cd0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
15ce0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
15cf0 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
15d00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15d10 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
15d20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
15d30 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
15d40 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
15d50 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
15d60 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
15d70 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
15d80 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
15d90 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
15da0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
15db0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
15dc0 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a  ts anywhere */..
15dd0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
15de0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
15df0 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
15e00 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
15e10 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
15e20 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
15e30 29 3c 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a  )<=SRT_Discard).
15e40 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
15e50 70 75 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20  put       5  /* 
15e60 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
15e70 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
15e80 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
15e90 20 20 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72        6  /* Stor
15ea0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
15eb0 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
15ec0 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
15ed0 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
15ee0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
15ef0 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
15f00 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
15f10 6c 65 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20  le        8  /* 
15f20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
15f30 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
15f40 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
15f50 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
15f60 6d 54 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43  mTab     9  /* C
15f70 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
15f80 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
15f90 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
15fa0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
15fb0 75 74 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47  utine   10  /* G
15fc0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
15fd0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
15fe0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
15ff0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
16000 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
16010 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
16020 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
16030 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16040 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
16050 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
16060 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 2f  eDest;         /
16070 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
16080 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
16090 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
160a0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
160b0 66 66 53 64 73 74 3b 20 20 20 20 20 2f 2a 20 41  ffSdst;     /* A
160c0 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
160d0 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
160e0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
160f0 6d 3b 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72  m;      /* A par
16100 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
16110 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
16120 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
16130 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
16140 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
16150 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
16160 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
16170 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
16180 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
16190 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
161a0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
161b0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
161c0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
161d0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
161e0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
161f0 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c  CREMENT .** tabl
16200 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
16210 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
16220 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
16230 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
16240 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
16250 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
16260 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
16270 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
16280 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
16290 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
162a0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
162b0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
162c0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
162d0 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
162e0 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
162f0 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74  rts are down wit
16300 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
16310 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
16320 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
16330 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
16340 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
16350 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
16360 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
16370 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
16380 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
16390 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
163a0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
163b0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
163c0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
163d0 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
163e0 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
163f0 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
16400 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
16410 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
16420 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
16430 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
16440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16450 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
16460 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
16470 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
16480 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
16490 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
164a0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
164b0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
164c0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
164d0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
164e0 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
164f0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16500 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
16510 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
16520 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
16530 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
16540 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
16550 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
16560 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
16570 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a  ated for each .*
16580 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
16590 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
165a0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
165b0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
165c0 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
165d0 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
165e0 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
165f0 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
16600 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
16610 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
16620 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
16630 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
16640 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
16650 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
16660 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
16670 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
16680 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
16690 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
166a0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
166b0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
166c0 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
166d0 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
166e0 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
166f0 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
16700 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
16710 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
16720 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
16730 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
16740 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
16750 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
16760 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
16770 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
16780 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
16790 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
167a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
167b0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
167c0 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
167d0 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
167e0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
167f0 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
16800 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
16810 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
16820 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20  esult of INSERT 
16830 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
16840 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
16850 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
16860 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
16870 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
16880 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
16890 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
168a0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
168b0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
168c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
168d0 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
168e0 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
168f0 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
16900 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
16910 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
16920 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
16930 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
16940 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
16950 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
16960 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
16970 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
16980 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
16990 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
169a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
169b0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
169c0 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
169d0 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
169e0 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
169f0 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
16a00 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
16a10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
16a20 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
16a30 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
16a40 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
16a50 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
16a60 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
16a70 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
16a80 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  ef sqlite3_uint6
16a90 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65  4 yDbMask;.#else
16aa0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
16ab0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
16ac0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16ad0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
16ae0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
16af0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16b00 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
16b10 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
16b20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
16b30 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
16b40 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
16b50 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
16b60 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
16b70 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
16b80 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
16b90 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
16ba0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
16bb0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
16bc0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
16bd0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
16be0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
16bf0 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
16c00 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
16c10 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
16c20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
16c30 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
16c40 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
16c50 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
16c60 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
16c70 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
16c80 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
16c90 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
16ca0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
16cb0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
16cc0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
16cd0 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
16ce0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
16cf0 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
16d00 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
16d10 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
16d20 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
16d30 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
16d40 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
16d50 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
16d60 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
16d70 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
16d80 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
16d90 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
16da0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
16db0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
16dc0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
16dd0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
16de0 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
16df0 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
16e00 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
16e10 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
16e20 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
16e30 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
16e40 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
16e50 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
16e60 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
16e70 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16e90 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
16ea0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
16eb0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
16ec0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
16ed0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
16ee0 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
16ef0 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
16f00 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
16f10 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
16f20 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
16f30 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
16f40 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
16f50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
16f60 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
16f70 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
16f80 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
16f90 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
16fa0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
16fb0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
16fc0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
16fd0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
16fe0 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b 20   u8 nTempInUse; 
16ff0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17000 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63 75  of aTempReg[] cu
17010 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
17020 6f 75 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c  out */.  u8 nCol
17030 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a  Cache;        /*
17040 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
17050 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b  es in aColCache[
17060 5d 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43 61  ] */.  u8 iColCa
17070 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
17080 65 78 74 20 65 6e 74 72 79 20 69 6e 20 61 43 6f  ext entry in aCo
17090 6c 43 61 63 68 65 5b 5d 20 74 6f 20 72 65 70 6c  lCache[] to repl
170a0 61 63 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  ace */.  u8 isMu
170b0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
170c0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
170d0 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
170e0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
170f0 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
17100 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
17110 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
17120 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
17130 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
17140 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
17150 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
17160 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
17170 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
17180 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
17190 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
171a0 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
171b0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
171c0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
171d0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
171e0 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
171f0 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
17200 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
17210 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
17220 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17230 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
17240 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
17250 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17260 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
17270 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
17280 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
17290 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
172a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
172b0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
172c0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
172d0 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
172e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
172f0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
17300 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
17310 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17320 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
17330 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
17340 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
17350 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
17360 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
17370 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
17380 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
17390 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
173a0 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
173b0 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
173c0 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
173d0 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
173e0 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
173f0 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
17400 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
17410 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
17420 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
17430 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
17440 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
17450 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
17460 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
17470 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  mber */.    int 
17480 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
17490 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
174a0 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
174b0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
174c0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
174d0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
174e0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
174f0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
17500 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
17510 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
17520 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
17530 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
17540 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
17550 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
17560 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
17570 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
17580 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
17590 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
175a0 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
175b0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
175c0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
175d0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
175e0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
175f0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
17600 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
17610 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
17620 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
17630 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
17640 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
17650 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
17660 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
17670 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
17680 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
17690 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
176a0 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20  t cookieGoto;   
176b0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
176c0 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b   OP_Goto to cook
176d0 69 65 20 76 65 72 69 66 69 65 72 20 73 75 62 72  ie verifier subr
176e0 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20  outine */.  int 
176f0 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
17700 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
17710 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
17720 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
17730 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
17740 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
17750 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
17760 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
17770 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
17780 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
17790 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
177a0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
177b0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
177c0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
177d0 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
177e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
177f0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
17800 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
17810 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54  b-program */.  T
17820 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
17830 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
17840 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
17850 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
17860 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
17870 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
17880 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
17890 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
178a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
178b0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
178c0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
178d0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
178e0 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
178f0 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
17900 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
17910 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
17920 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
17930 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
17940 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
17950 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
17960 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
17970 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
17980 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
17990 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
179a0 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
179b0 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
179c0 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
179d0 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
179e0 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
179f0 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
17a00 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
17a10 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
17a20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20  u32 nQueryLoop; 
17a30 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62       /* Est numb
17a40 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
17a50 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a   of a query (10*
17a60 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33  log2(N)) */.  u3
17a70 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
17a80 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
17a90 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
17aa0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
17ab0 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
17ac0 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
17ad0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
17ae0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
17af0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
17b00 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
17b10 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
17b20 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
17b30 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
17b40 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
17b50 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
17b60 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
17b70 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
17b80 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
17b90 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
17ba0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f  ers */..  /* Abo
17bb0 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
17bc0 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
17bd0 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
17be0 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
17bf0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
17c00 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e  cursion */..  in
17c10 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
17c20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17c30 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
17c40 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
17c50 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
17c60 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
17c70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17c80 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
17c90 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
17ca0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
17cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17cc0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
17cd0 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
17ce0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
17cf0 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
17d00 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
17d10 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
17d20 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
17d30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
17d40 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
17d50 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
17d60 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
17d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17d80 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
17d90 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
17da0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
17db0 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
17dc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17dd0 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
17de0 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
17df0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
17e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
17e10 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
17e20 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
17e30 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
17e40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17e50 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
17e60 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
17e70 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
17e80 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
17e90 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
17ea0 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
17eb0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
17ec0 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
17ed0 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
17ee0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
17ef0 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
17f00 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
17f10 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
17f20 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
17f30 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
17f40 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
17f50 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
17f60 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
17f70 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
17f80 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c  )) */.  int *aAl
17f90 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
17fa0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73    /* Register us
17fb0 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73  ed to hold alias
17fc0 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63  ed result */.  c
17fd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
17fe0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
17ff0 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
18000 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
18010 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
18020 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
18030 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
18040 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
18050 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
18060 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
18070 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
18080 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
18090 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
180a0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
180b0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
180c0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
180d0 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
180e0 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
180f0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
18100 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
18110 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
18120 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
18130 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
18140 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
18150 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
18160 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
18170 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
18180 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
18190 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
181a0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
181b0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
181c0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
181d0 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
181e0 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
181f0 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
18200 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18210 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
18220 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
18230 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
18240 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
18250 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
18260 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
18270 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
18280 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
18290 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
182a0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
182b0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
182c0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b  d triggers */.};
182d0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
182e0 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
182f0 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
18300 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
18310 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
18320 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18330 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
18340 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
18350 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
18360 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
18370 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
18380 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
18390 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
183a0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
183b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
183c0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
183d0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
183e0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
183f0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
18400 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
18410 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
18420 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
18430 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
18440 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
18450 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
18460 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
18470 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
18480 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
18490 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
184a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
184b0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
184c0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
184d0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
184e0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
184f0 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
18500 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18510 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
18520 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
18530 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
18540 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
18550 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
18560 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
18570 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
18580 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
18590 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
185a0 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
185b0 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
185c0 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
185d0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
185e0 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
185f0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
18600 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
18610 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
18620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18630 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
18640 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
18650 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
18660 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
18670 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18680 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20  AG_CLEARCACHE   
18690 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61   0x20    /* Clea
186a0 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  r pseudo-table c
186b0 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d  ache in OP_Colum
186c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
186d0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
186e0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
186f0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
18700 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
18710 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18720 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
18730 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
18740 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
18750 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
18760 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
18770 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
18780 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
18790 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
187a0 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
187b0 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
187c0 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  G       0x02    
187d0 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
187e0 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
187f0 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
18800 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
18810 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
18820 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
18830 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
18840 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  on */../*. * Eac
18850 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
18860 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
18870 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
18880 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
18890 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
188a0 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
188b0 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
188c0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
188d0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
188e0 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
188f0 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
18900 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
18910 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
18920 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
18930 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
18940 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
18950 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
18960 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
18970 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
18980 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
18990 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
189a0 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
189b0 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
189c0 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
189d0 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
189e0 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
189f0 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
18a00 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
18a10 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
18a20 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
18a30 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
18a40 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
18a50 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
18a60 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
18a70 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
18a80 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
18a90 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
18aa0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
18ab0 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
18ac0 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
18ad0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
18ae0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
18af0 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
18b00 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
18b10 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
18b20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18b30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18b40 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
18b50 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
18b60 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
18b70 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
18b80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
18b90 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
18ba0 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
18bb0 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
18bc0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
18bd0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
18be0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
18bf0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
18c00 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
18c10 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
18c20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
18c30 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
18c40 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
18c50 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
18c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
18c70 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
18c80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18c90 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
18ca0 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
18cb0 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
18cc0 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
18cd0 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
18ce0 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
18d10 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
18d20 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
18d30 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
18d40 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
18d50 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
18d60 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
18d70 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
18d80 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
18d90 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
18da0 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
18db0 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
18dc0 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
18dd0 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
18de0 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
18df0 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
18e00 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
18e10 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
18e20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
18e30 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
18e40 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
18e50 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
18e60 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
18e70 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
18e80 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
18e90 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
18ea0 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
18eb0 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
18ec0 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
18ed0 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
18ee0 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
18ef0 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
18f00 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
18f10 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
18f20 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
18f30 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
18f40 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
18f50 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
18f60 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
18f70 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
18f80 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
18f90 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
18fa0 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
18fb0 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
18fc0 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
18fd0 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
18fe0 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
18ff0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19000 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
19010 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
19020 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
19030 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
19040 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
19050 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
19060 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
19070 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
19080 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
19090 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
190a0 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
190b0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
190c0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
190d0 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
190e0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
190f0 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
19100 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
19110 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
19120 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
19130 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
19140 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
19150 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
19160 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
19170 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
19180 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
19190 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
191a0 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
191b0 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
191c0 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
191d0 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
191e0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
191f0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
19200 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
19210 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
19220 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
19230 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
19240 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
19250 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
19260 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
19270 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
19280 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
19290 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65  e NULL.. * targe
192a0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
192b0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
192c0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
192d0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
192e0 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
192f0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
19300 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
19310 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
19320 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19340 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
19350 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
19360 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
19370 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
19380 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
19390 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
193a0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
193b0 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
193c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
193d0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
193e0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
193f0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
19400 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
19410 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
19420 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
19430 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  LETE). * target 
19440 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
19450 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
19460 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
19470 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
19480 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
19490 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
194a0 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
194b0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
194c0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
194d0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
194e0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
194f0 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
19500 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
19510 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
19520 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
19530 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
19540 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
19550 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
19560 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
19570 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
19580 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
19590 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
195a0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
195b0 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
195c0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
195d0 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
195e0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
195f0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
19600 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
19610 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
19620 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
19630 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
19640 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
19650 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
19660 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
19670 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
19680 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
19690 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
196b0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
196c0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
196d0 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
196e0 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
196f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
19700 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
19710 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
19720 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
19730 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
19740 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
19750 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
19760 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
19770 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e  * SELECT statmen
19780 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
19790 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43  RT INTO .. SELEC
197a0 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e  T ... */.  Token
197b0 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20   target;        
197c0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
197d0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
197e0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
197f0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
19800 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
19810 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
19820 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
19830 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
19840 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
19850 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
19860 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20  UPDATE.  VALUES 
19870 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52  clause for INSER
19880 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  T */.  IdList *p
19890 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
198a0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
198b0 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
198c0 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
198d0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
198e0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
198f0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
19900 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
19910 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
19920 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
19930 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
19940 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
19950 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
19960 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
19970 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
19980 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
19990 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
199a0 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
199b0 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
199c0 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
199d0 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
199e0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
199f0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
19a00 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
19a10 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
19a20 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
19a30 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
19a40 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
19a50 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
19a60 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
19a70 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
19a80 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
19a90 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ema */.  const c
19aa0 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
19ab0 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
19ac0 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
19ad0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
19ae0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
19af0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
19b00 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
19b10 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
19b20 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
19b30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
19b40 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
19b50 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
19b60 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
19b70 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
19b80 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
19b90 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
19ba0 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
19bb0 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
19bc0 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
19bd0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
19be0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
19bf0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
19c00 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
19c10 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
19c20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
19c30 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
19c40 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
19c50 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
19c60 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
19c70 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
19c80 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
19c90 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
19ca0 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
19cb0 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
19cc0 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
19cd0 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
19ce0 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
19cf0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
19d00 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
19d10 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
19d20 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
19d30 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
19d40 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
19d50 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
19d60 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
19d70 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
19d80 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
19d90 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d  ngth */.  u8   m
19da0 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f  allocFailed;   /
19db0 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
19dc0 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c  f any memory all
19dd0 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f  ocation fails */
19de0 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f  .  u8   useMallo
19df0 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f  c;      /* 0: no
19e00 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44  ne,  1: sqlite3D
19e10 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c  bMalloc,  2: sql
19e20 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20  ite3_malloc */. 
19e30 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20   u8   tooBig;   
19e40 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73        /* Becomes
19e50 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20   true if string 
19e60 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d  size exceeds lim
19e70 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  its */.};../*.**
19e80 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
19e90 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
19ea0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
19eb0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
19ec0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
19ed0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
19ee0 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
19ef0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
19f00 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
19f10 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
19f20 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
19f30 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
19f40 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
19f50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
19f60 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
19f70 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
19f80 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
19f90 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
19fa0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
19fb0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
19fc0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
19fd0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
19fe0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
19ff0 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1a000 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1a010 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1a020 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1a030 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1a040 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1a050 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1a060 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1a070 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1a080 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1a090 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1a0a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1a0b0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1a0c0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1a0f0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1a100 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1a110 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1a120 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1a130 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1a140 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1a150 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a170 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1a180 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1a190 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1a1c0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1a1d0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1a1e0 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a200 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1a210 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1a220 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1a230 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1a260 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1a270 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a290 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1a2a0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1a2b0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1a2c0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1a2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1a2e0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1a2f0 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1a300 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1a310 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1a320 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1a330 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1a340 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1a350 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1a360 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1a370 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1a380 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1a390 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1a3a0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1a3b0 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1a3c0 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1a3d0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1a3e0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a400 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1a410 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1a420 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1a430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a440 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1a450 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1a460 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1a470 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1a480 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1a490 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1a4a0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1a4b0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1a4c0 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1a4d0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1a4e0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1a4f0 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1a500 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1a510 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1a520 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1a530 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1a540 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1a550 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1a560 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1a590 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1a5a0 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1a5b0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1a5c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a5d0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1a5e0 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1a5f0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1a600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1a610 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1a620 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a650 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1a660 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1a670 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a690 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1a6a0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1a6b0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1a6c0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1a6d0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1a6e0 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1a6f0 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1a700 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1a710 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1a720 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1a730 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1a740 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1a750 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1a760 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1a770 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1a780 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1a790 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1a7a0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1a7b0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1a7c0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a7e0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1a7f0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1a800 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1a810 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a830 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1a840 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1a850 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1a860 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a880 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1a890 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1a8a0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1a8b0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a8d0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1a8e0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1a8f0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1a900 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1a910 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1a920 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1a930 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1a940 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1a950 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1a960 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1a970 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1a980 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74  alize() */.  int
1a990 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a9b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1a9c0 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1a9d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1a9e0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1a9f0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1aa00 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1aa10 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1aa20 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1aa40 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1aa50 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74   xLog() */.  int
1aa60 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
1aa70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1aa80 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
1aa90 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
1aaa0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1aab0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1aac0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1aad0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1aae0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1aaf0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1ab00 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b  ogArg;.#endif.};
1ab10 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
1ab20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
1ab30 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
1ab40 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
1ab50 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
1ab60 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
1ab70 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
1ab80 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
1ab90 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
1aba0 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
1abb0 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1abc0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1abd0 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
1abe0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1abf0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1ac20 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1ac30 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
1ac40 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ac60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
1ac70 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 62  ueries */.  u8 b
1ac80 53 65 6c 65 63 74 44 65 70 74 68 46 69 72 73 74  SelectDepthFirst
1ac90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aca0 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62 71        /* Do subq
1acb0 75 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f 0a  ueries first */.
1acc0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1acf0 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1ad00 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1ad10 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1ad40 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1ad50 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ad80 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1ad90 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
1ada0 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
1add0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
1ade0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
1adf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ae00 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
1ae10 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
1ae20 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
1ae30 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
1ae40 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
1ae50 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
1ae60 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
1ae70 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1ae80 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
1ae90 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1aea0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
1aeb0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1aec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1aed0 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
1aee0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1aef0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1af00 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
1af10 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
1af20 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
1af30 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
1af40 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
1af50 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
1af60 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
1af70 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
1af80 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
1af90 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
1afa0 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
1afb0 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
1afc0 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
1afd0 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
1afe0 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
1aff0 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
1b000 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
1b010 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
1b020 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
1b030 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  lk */../*.** Ass
1b040 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1b050 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1b060 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1b070 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1b080 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1b090 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1b0a0 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1b0b0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1b0c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1b0d0 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1b0e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1b0f0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1b100 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1b110 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1b140 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1b150 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1b160 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1b170 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1b1b0 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1b1c0 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1b1d0 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1b1e0 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1b1f0 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1b200 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1b210 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1b220 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1b230 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1b240 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1b250 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1b260 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1b270 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1b280 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1b290 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1b2a0 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1b2b0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1b2c0 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1b2d0 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1b2e0 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1b2f0 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1b300 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1b310 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1b320 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1b330 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1b340 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1b350 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1b360 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1b370 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1b380 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1b390 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1b3a0 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1b3b0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1b3c0 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1b3d0 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1b3e0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1b3f0 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1b400 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1b410 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1b420 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1b430 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1b440 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1b450 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1b460 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1b470 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1b480 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1b490 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1b4a0 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1b4b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b4c0 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1b4d0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1b4e0 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1b4f0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1b500 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1b510 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b520 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1b530 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1b540 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1b550 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1b560 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1b570 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1b580 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1b590 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1b5a0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1b5b0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1b5c0 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1b5d0 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1b5e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1b5f0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1b600 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1b610 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1b620 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1b630 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1b640 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1b650 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1b660 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1b670 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1b680 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1b690 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1b6a0 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1b6b0 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1b6c0 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1b6d0 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1b6e0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1b6f0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1b700 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1b710 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1b720 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1b730 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1b740 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1b750 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1b760 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1b770 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1b780 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1b790 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1b7a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1b7b0 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1b7c0 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1b7d0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1b7e0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1b7f0 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1b800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1b810 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1b820 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1b830 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1b840 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1b850 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1b860 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1b870 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1b880 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1b890 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1b8a0 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1b8b0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1b8c0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1b8d0 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1b8e0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1b8f0 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1b900 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1b910 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1b920 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1b930 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1b940 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1b950 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1b960 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1b970 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1b980 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1b990 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1b9a0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1b9b0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1b9c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1b9d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1b9e0 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1b9f0 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1ba00 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1ba10 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1ba20 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1ba30 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ba40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1ba50 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1ba60 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1ba70 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1ba80 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1ba90 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1baa0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bab0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1bac0 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1bad0 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1bae0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1baf0 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1bb00 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1bb10 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1bb20 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1bb30 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1bb40 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1bb50 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1bb60 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1bb70 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1bb80 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1bb90 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1bba0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1bbb0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1bbc0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1bbd0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1bbe0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1bbf0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1bc00 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1bc10 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1bc20 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1bc30 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1bc40 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1bc50 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1bc60 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1bc70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1bc80 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1bc90 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1bca0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1bcb0 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1bcc0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1bcd0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1bce0 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1bcf0 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1bd00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1bd10 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1bd20 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1bd30 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1bd40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1bd50 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1bd60 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1bd70 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1bd80 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1bd90 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1bda0 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1bdb0 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1bdc0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1bdd0 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1bde0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1bdf0 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1be00 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1be10 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1be20 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1be30 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1be40 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1be50 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1be60 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1be70 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1be80 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1be90 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1bea0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1beb0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1bec0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1bed0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1bee0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1bef0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1bf00 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1bf10 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1bf20 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1bf30 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1bf40 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1bf50 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1bf60 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1bf70 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1bf80 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1bf90 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1bfa0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1bfb0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1bfc0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1bfd0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1bfe0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1bff0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1c000 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1c010 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1c020 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1c030 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1c040 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1c050 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1c060 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c070 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1c080 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1c090 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1c0a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c0b0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1c0c0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1c0d0 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1c0e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c0f0 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1c100 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1c110 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1c120 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1c130 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1c140 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1c150 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1c160 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1c170 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1c180 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1c190 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1c1a0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1c1b0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1c1c0 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1c1d0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1c1e0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1c1f0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1c200 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1c210 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1c220 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1c230 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1c240 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1c250 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1c260 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1c270 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1c280 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1c290 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1c2a0 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1c2b0 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1c2c0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1c2d0 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1c2e0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1c2f0 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1c300 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1c310 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1c320 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1c330 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1c340 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1c350 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1c360 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1c370 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c380 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1c390 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  f..void sqlite3V
1c3a0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1c3b0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
1c3c0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
1c3d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c3e0 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71  IT_TRACE.void sq
1c3f0 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
1c400 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
1c410 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1c420 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  f.char *sqlite3M
1c430 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1c440 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1c450 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1c460 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
1c470 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
1c480 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
1c490 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
1c4a0 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
1c4b0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
1c4c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1c4d0 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
1c4e0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1c4f0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1c500 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
1c510 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1c520 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
1c530 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
1c540 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
1c550 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
1c560 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
1c570 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
1c580 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
1c590 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
1c5a0 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
1c5b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1c5c0 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
1c5d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1c5e0 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
1c5f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1c600 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
1c610 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1c620 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
1c630 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
1c640 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1c650 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
1c660 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1c670 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
1c680 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
1c690 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
1c6a0 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
1c6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1c6c0 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
1c6d0 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
1c6e0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c6f0 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
1c700 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1c710 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1c720 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
1c730 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
1c740 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
1c750 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
1c760 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1c770 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1c780 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1c790 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1c7a0 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
1c7b0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1c7c0 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
1c7d0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1c7e0 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
1c7f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c800 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
1c810 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c820 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
1c830 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
1c840 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
1c850 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
1c860 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
1c870 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
1c880 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
1c890 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1c8a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
1c8b0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
1c8c0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1c8d0 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
1c8e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1c8f0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1c900 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
1c910 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1c920 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
1c930 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
1c940 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
1c950 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1c960 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
1c970 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1c980 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
1c990 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
1c9a0 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
1c9b0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1c9c0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1c9d0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1c9e0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1c9f0 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
1ca00 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
1ca10 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1ca20 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
1ca30 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
1ca40 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
1ca50 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
1ca60 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1ca70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1ca80 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
1ca90 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
1caa0 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
1cab0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
1cac0 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
1cad0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
1cae0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
1caf0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1cb00 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
1cb10 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
1cb20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
1cb30 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
1cb40 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1cb50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cb60 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
1cb70 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1cb80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cb90 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1cba0 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
1cbb0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1cbc0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
1cbd0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
1cbe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1cbf0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
1cc00 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
1cc10 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1cc20 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1cc30 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
1cc40 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
1cc50 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1cc60 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
1cc70 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
1cc80 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1cc90 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
1cca0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
1ccb0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1ccc0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
1ccd0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
1cce0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
1ccf0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1cd00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1cd10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1cd20 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
1cd30 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
1cd40 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1cd50 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1cd60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
1cd70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
1cd80 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
1cd90 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
1cda0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
1cdb0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
1cdc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1cdd0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
1cde0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
1cdf0 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
1ce00 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
1ce10 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
1ce20 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
1ce30 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
1ce40 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1ce50 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1ce60 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1ce70 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1ce80 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1ce90 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1cea0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1ceb0 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1cec0 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1ced0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1cee0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1cef0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1cf00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1cf10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1cf20 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1cf30 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1cf40 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1cf50 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1cf60 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1cf70 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1cf80 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1cf90 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1cfa0 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1cfb0 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1cfc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cfd0 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1cfe0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1cff0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1d000 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
1d010 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
1d020 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
1d030 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1d040 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
1d050 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
1d060 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
1d070 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
1d080 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1d090 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1d0a0 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72  ite3CodeOnce(Par
1d0b0 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a  se *);..Bitvec *
1d0c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
1d0d0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
1d0e0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
1d0f0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
1d100 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
1d110 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
1d120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1d130 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
1d140 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
1d150 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
1d160 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
1d170 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
1d180 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
1d190 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  c*);.int sqlite3
1d1a0 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
1d1b0 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f  t(int,int*);..Ro
1d1c0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
1d1d0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
1d1e0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
1d1f0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
1d200 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
1d210 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
1d220 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
1d230 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
1d240 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1d250 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
1d260 20 75 38 20 69 42 61 74 63 68 2c 20 69 36 34 29   u8 iBatch, i64)
1d270 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
1d280 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
1d290 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
1d2a0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
1d2b0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1d2c0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
1d2d0 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
1d2e0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1d2f0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
1d300 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1d310 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1d320 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
1d330 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
1d340 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
1d350 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1d360 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
1d370 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
1d380 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 0.#endif..void
1d390 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
1d3a0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
1d3b0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1d3c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
1d3d0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
1d3e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1d3f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d400 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
1d410 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
1d420 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1d430 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
1d440 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1d450 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
1d460 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
1d470 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1d480 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1d490 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1d4a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1d4b0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1d4c0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
1d4d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1d4e0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
1d4f0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
1d500 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e 65  te3CodeCoroutine
1d510 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
1d520 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
1d530 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
1d540 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
1d550 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
1d560 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
1d570 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1d580 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
1d590 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
1d5a0 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
1d5b0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1d5c0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
1d5d0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
1d5e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1d5f0 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
1d600 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
1d610 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
1d620 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
1d630 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
1d640 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1d650 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
1d660 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
1d670 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
1d680 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
1d690 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
1d6a0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1d6b0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
1d6c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1d6d0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
1d710 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
1d720 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1d730 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
1d740 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
1d750 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
1d760 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1d770 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
1d780 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
1d790 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
1d7a0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1d7b0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1d7c0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1d7d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
1d7e0 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
1d7f0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
1d800 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
1d810 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1d820 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1d830 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
1d840 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1d850 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
1d860 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
1d870 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
1d880 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
1d890 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
1d8a0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8c0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e   Token*, int, in
1d8d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d8e0 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1d8f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1d900 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1d910 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1d920 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1d930 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1d940 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1d950 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1d960 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1d970 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1d9a0 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1d9b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1d9c0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1d9d0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1d9e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1d9f0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1da00 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1da10 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1da20 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1da30 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1da40 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1da50 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1da60 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1da70 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1da80 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1da90 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1daa0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1dab0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1dac0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1dad0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1dae0 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1daf0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1db00 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1db10 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1db20 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1db30 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1db40 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1db50 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1db60 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1db70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1db80 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1db90 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1dba0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1dbb0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1dbc0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1dbd0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1dbe0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1dbf0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
1dc00 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
1dc10 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
1dc20 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1dc30 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1dc40 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
1dc50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1dc60 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
1dc70 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1dc80 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
1dc90 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
1dca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1dcb0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
1dcc0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1dcd0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
1dce0 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
1dcf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1dd00 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
1dd10 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1dd20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
1dd30 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1dd40 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
1dd50 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
1dd60 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1dd70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dd80 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
1dd90 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1dda0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1ddb0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
1ddc0 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
1ddd0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1dde0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1ddf0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
1de00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1de10 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20  achePop(Parse*, 
1de20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1de30 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
1de40 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1de50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1de60 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
1de70 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1de80 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
1de90 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
1dea0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1deb0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1dec0 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
1ded0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1dee0 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
1def0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1df00 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1df10 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
1df20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1df30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1df40 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
1df50 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1df60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1df70 74 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74  te3ExprCodeConst
1df80 61 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70  ants(Parse*, Exp
1df90 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1dfa0 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
1dfb0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1dfc0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1dfd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
1dfe0 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
1dff0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1e000 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e010 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
1e020 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
1e030 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e040 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
1e050 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1e060 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1e070 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1e080 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
1e090 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
1e0a0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e0b0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1e0c0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
1e0d0 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
1e0e0 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
1e0f0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
1e100 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
1e110 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
1e120 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1e130 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1e140 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1e150 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1e160 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1e170 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e180 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1e190 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
1e1a0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1e1b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
1e1c0 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
1e1d0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
1e1e0 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
1e1f0 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
1e200 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1e210 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1e220 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e230 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
1e240 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1e250 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
1e260 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
1e270 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
1e280 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
1e290 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
1e2a0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
1e2b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e2c0 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
1e2d0 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
1e2e0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1e2f0 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
1e300 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
1e310 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
1e320 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
1e330 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e340 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
1e350 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1e360 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
1e370 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  reState(void);.v
1e380 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
1e390 65 73 65 74 53 74 61 74 65 28 76 6f 69 64 29 3b  esetState(void);
1e3a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
1e3b0 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
1e3c0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1e3d0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
1e3e0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
1e3f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e400 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
1e410 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
1e420 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
1e430 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1e440 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1e450 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e460 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
1e470 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
1e480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
1e490 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
1e4a0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e4b0 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
1e4c0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
1e4d0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1e4e0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
1e4f0 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
1e500 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
1e510 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
1e520 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
1e530 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
1e540 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
1e550 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1e560 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
1e570 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1e580 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1e590 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
1e5a0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e5b0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
1e5c0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
1e5d0 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
1e5e0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
1e5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e600 78 70 72 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d  xprCodeIsNullJum
1e610 70 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45  p(Vdbe*, const E
1e620 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
1e630 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e640 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
1e650 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
1e660 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
1e670 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
1e680 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1e690 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
1e6a0 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
1e6b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e6c0 74 2c 20 69 6e 74 2c 20 54 72 69 67 67 65 72 20  t, int, Trigger 
1e6d0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1e6e0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
1e6f0 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
1e700 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e710 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1e720 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
1e730 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
1e740 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
1e750 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e760 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
1e770 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
1e780 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a  Table*,int,int,.
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7b0 20 20 20 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e       int*,int,in
1e7c0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b  t,int,int,int*);
1e7d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1e7e0 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
1e7f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1e800 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
1e810 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  nt, int, int);.i
1e820 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
1e830 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
1e840 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1e850 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e860 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
1e870 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
1e880 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e890 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
1e8a0 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
1e8b0 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
1e8c0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e8d0 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
1e8e0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
1e8f0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e  , int, char*, in
1e900 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
1e910 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
1e920 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
1e930 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
1e940 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
1e950 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
1e960 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
1e970 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
1e980 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
1e990 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
1e9a0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
1e9b0 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
1e9c0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1e9d0 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
1e9e0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
1e9f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
1ea00 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
1ea10 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
1ea20 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
1ea30 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
1ea40 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
1ea50 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
1ea60 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
1ea70 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
1ea80 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
1ea90 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1eaa0 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
1eab0 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
1eac0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1ead0 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
1eae0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1eaf0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
1eb00 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
1eb10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
1eb20 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
1eb30 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
1eb40 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
1eb50 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
1eb60 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
1eb70 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1eb80 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
1eb90 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1eba0 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
1ebb0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
1ebc0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
1ebd0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
1ebe0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
1ebf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
1ec00 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
1ec10 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
1ec20 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
1ec30 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
1ec40 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
1ec70 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ec80 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
1ec90 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
1eca0 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
1ecb0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
1ecc0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
1ecd0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1ece0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1ecf0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1ed00 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
1ed10 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
1ed20 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1ed30 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
1ed40 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
1ed50 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
1ed60 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
1ed70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
1ed80 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
1ed90 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
1eda0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1edb0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
1edc0 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
1edd0 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
1ede0 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1ee10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
1ee20 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
1ee30 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
1ee40 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
1ee50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1ee60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
1ee70 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
1ee80 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
1ee90 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
1eea0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1eeb0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
1eec0 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
1eed0 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
1eee0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1eef0 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
1ef00 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
1ef10 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
1ef20 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1ef30 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
1ef40 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
1ef50 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
1ef90 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
1efa0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
1efb0 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
1efc0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
1efd0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
1efe0 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
1eff0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f000 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
1f010 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
1f020 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
1f030 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
1f040 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
1f050 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
1f060 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1f070 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
1f080 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1f090 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
1f0a0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
1f0b0 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
1f0c0 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
1f0d0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
1f0e0 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
1f0f0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
1f100 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
1f110 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
1f120 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
1f130 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f140 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
1f150 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
1f160 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
1f170 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
1f180 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f190 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
1f1a0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1f1b0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
1f1c0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
1f1d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f1e0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1f1f0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
1f200 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
1f210 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1f220 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
1f230 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
1f240 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
1f250 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
1f260 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
1f270 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
1f280 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1f290 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
1f2a0 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
1f2b0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
1f2c0 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
1f2d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
1f2e0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1f2f0 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
1f300 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
1f310 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
1f320 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1f330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1f340 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
1f350 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
1f360 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f370 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
1f380 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1f390 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
1f3a0 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
1f3b0 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
1f3c0 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
1f3d0 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
1f3e0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1f3f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1f400 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1f410 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
1f420 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
1f430 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
1f440 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f450 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
1f460 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
1f470 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
1f480 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
1f490 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
1f4a0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
1f4b0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1f4c0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1f4d0 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
1f4e0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
1f4f0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
1f500 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
1f510 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1f520 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
1f530 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
1f540 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
1f550 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
1f560 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
1f570 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
1f580 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
1f590 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1f5a0 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
1f5b0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  se*, Expr*);.int
1f5c0 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
1f5d0 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
1f5e0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1f5f0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
1f600 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f610 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
1f620 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1f630 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
1f640 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
1f650 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1f660 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
1f670 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1f680 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
1f690 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
1f6a0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1f6b0 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
1f6c0 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
1f6d0 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
1f6e0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
1f6f0 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
1f700 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
1f710 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
1f720 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
1f730 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1f740 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
1f750 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1f760 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
1f770 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
1f780 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
1f790 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
1f7a0 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
1f7b0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
1f7c0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
1f7d0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
1f7e0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  );../*.** Routin
1f7f0 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77  es to read and w
1f800 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  rite variable-le
1f810 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20  ngth integers.  
1f820 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a  These used to.**
1f830 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61   be defined loca
1f840 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20  lly, but now we 
1f850 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72  use the varint r
1f860 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75  outines in the u
1f870 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20  til.c.** file.  
1f880 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20  Code should use 
1f890 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20  the MACRO forms 
1f8a0 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61  below, as the Va
1f8b0 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a  rint32 versions.
1f8c0 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20  ** are coded to 
1f8d0 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c  assume the singl
1f8e0 65 20 62 79 74 65 20 63 61 73 65 20 69 73 20 61  e byte case is a
1f8f0 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28  lready handled (
1f900 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41  which .** the MA
1f910 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a  CRO form does)..
1f920 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
1f930 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
1f940 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e   char*, u64);.in
1f950 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
1f960 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68  nt32(unsigned ch
1f970 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71  ar*, u32);.u8 sq
1f980 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
1f990 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1f9a0 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
1f9b0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
1f9c0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
1f9d0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
1f9e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
1f9f0 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
1fa00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65  ./*.** The heade
1fa10 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f  r of a record co
1fa20 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65 71 75  nsists of a sequ
1fa30 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65  ence variable-le
1fa40 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a  ngth integers..*
1fa50 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65 72 73  * These integers
1fa60 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61   are almost alwa
1fa70 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65  ys small and are
1fa80 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69   encoded as a si
1fa90 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68  ngle byte..** Th
1faa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1fab0 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67  os take advantag
1fac0 65 20 74 68 69 73 20 66 61 63 74 20 74 6f 20 70  e this fact to p
1fad0 72 6f 76 69 64 65 20 61 20 66 61 73 74 20 65 6e  rovide a fast en
1fae0 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f  code.** and deco
1faf0 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  de of the intege
1fb00 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68  rs in a record h
1fb10 65 61 64 65 72 2e 20 20 49 74 20 69 73 20 66 61  eader.  It is fa
1fb20 73 74 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d  ster for the com
1fb30 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72  mon.** case wher
1fb40 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73  e the integer is
1fb50 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
1fb60 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20   It is a little 
1fb70 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a  slower when the.
1fb80 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20 74 77  ** integer is tw
1fb90 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e  o or more bytes.
1fba0 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74    But overall it
1fbb0 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a   is faster..**.*
1fbc0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1fbd0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
1fbe0 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a  equivalent:.**.*
1fbf0 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65  *     x = sqlite
1fc00 33 47 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c  3GetVarint32( A,
1fc10 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20   &B );.**     x 
1fc20 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  = sqlite3PutVari
1fc30 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
1fc40 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56  .**     x = getV
1fc50 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
1fc60 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56  .**     x = putV
1fc70 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
1fc80 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  .**.*/.#define g
1fc90 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
1fca0 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
1fcb0 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
1fcc0 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
1fcd0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
1fce0 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
1fcf0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
1fd00 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
1fd10 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
1fd20 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
1fd30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
1fd40 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
1fd50 50 75 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  PutVarint32((A),
1fd60 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
1fd70 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
1fd80 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
1fd90 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
1fda0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1fdb0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
1fdc0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
1fdd0 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
1fde0 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73  Index *);.void s
1fdf0 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e  qlite3TableAffin
1fe00 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54  ityStr(Vdbe *, T
1fe10 61 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71  able *);.char sq
1fe20 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69  lite3CompareAffi
1fe30 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
1fe40 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e  , char aff2);.in
1fe50 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66  t sqlite3IndexAf
1fe60 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70  finityOk(Expr *p
1fe70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61  Expr, char idx_a
1fe80 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73  ffinity);.char s
1fe90 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
1fea0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
1feb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
1fec0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
1fed0 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
1fee0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
1fef0 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  r(sqlite3*, int,
1ff00 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
1ff10 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1ff20 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
1ff30 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
1ff40 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
1ff50 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
1ff60 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
1ff70 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
1ff80 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
1ff90 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
1ffa0 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
1ffb0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
1ffc0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1ffd0 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TEST) || \.    d
1ffe0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1fff0 42 55 47 5f 4f 53 5f 54 52 41 43 45 29 0a 63 6f  BUG_OS_TRACE).co
20000 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
20010 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
20020 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
20030 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
20040 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
20050 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
20060 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
20070 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
20080 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
20090 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
200a0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
200b0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
200c0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
200d0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
200e0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
200f0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
20100 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
20110 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
20120 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
20130 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
20140 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
20150 72 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f 6b 65  rse, Expr*, Toke
20160 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
20170 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
20180 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
20190 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
201a0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
201b0 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
201c0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
201d0 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
201e0 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
201f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
20200 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
20210 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
20220 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
20230 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
20240 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
20250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
20260 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
20270 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
20280 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
20290 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
202a0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
202b0 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
202c0 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
202d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
202e0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
202f0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
20300 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
20310 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
20320 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
20330 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
20340 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
20350 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
20360 68 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f  har *z,int);..co
20370 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
20380 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
20390 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
203a0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
203b0 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
203c0 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
203d0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
203e0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
203f0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
20400 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
20430 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
20440 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
20450 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
20460 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
20470 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
20480 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
20490 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
204a0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
204b0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66  *, int, u8);.#if
204c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
204d0 45 5f 53 54 41 54 33 0a 63 68 61 72 20 2a 73 71  E_STAT3.char *sq
204e0 6c 69 74 65 33 55 74 66 38 74 6f 31 36 28 73 71  lite3Utf8to16(sq
204f0 6c 69 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61  lite3 *, u8, cha
20500 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29  r *, int, int *)
20510 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
20520 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
20530 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
20540 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
20550 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
20560 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
20570 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
20580 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
20590 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
205a0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
205b0 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
205c0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
205d0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
205e0 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
205f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20600 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
20610 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
20620 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
20630 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
20640 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
20650 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
20660 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
20670 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
20680 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
20690 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
206a0 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
206b0 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
206c0 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
206d0 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
206e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
206f0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
20700 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
20710 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
20720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
20730 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
20740 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
20750 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20760 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
20770 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
20780 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
20790 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
207a0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
207b0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
207c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
207d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
207e0 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
207f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20800 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
20810 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
20820 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
20830 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
20840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
20850 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
20860 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
20870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
20880 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
20890 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
208a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
208b0 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
208c0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
208d0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
208e0 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
208f0 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
20900 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
20910 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
20920 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
20930 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
20940 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
20950 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
20960 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
20970 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
20980 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20990 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
209a0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
209b0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
209c0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
209d0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
209e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
209f0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
20a00 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
20a10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
20a20 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
20a30 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
20a40 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
20a50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
20a60 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
20a70 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
20a80 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
20a90 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
20aa0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
20ab0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
20ac0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
20ad0 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
20ae0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
20af0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
20b00 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
20b10 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
20b20 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
20b30 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
20b40 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20b50 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
20b60 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20b70 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
20b80 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
20b90 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
20ba0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
20bb0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
20bc0 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
20bd0 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
20be0 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
20bf0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
20c00 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
20c10 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
20c20 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
20c30 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
20c40 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
20c50 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
20c60 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
20c70 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
20c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
20c90 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
20ca0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
20cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
20cc0 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
20cd0 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
20ce0 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
20cf0 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
20d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
20d10 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
20d20 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
20d30 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
20d40 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50  e3IndexKeyinfo(P
20d50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  arse *, Index *)
20d60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  ;.int sqlite3Cre
20d70 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
20d80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
20d90 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
20da0 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
20db0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
20dc0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
20dd0 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
20de0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
20df0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
20e00 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
20e10 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
20e20 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
20e30 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
20e40 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
20e50 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
20e60 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
20e70 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
20e80 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
20e90 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
20ea0 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
20eb0 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
20ec0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20ed0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
20ee0 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
20ef0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
20f00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
20f10 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75  endSpace(StrAccu
20f20 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  m*,int);.char *s
20f30 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
20f40 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
20f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
20f60 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
20f70 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
20f80 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
20f90 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
20fa0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
20fb0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
20fc0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
20fd0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
20fe0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
20ff0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
21000 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
21010 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
21020 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
21030 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
21040 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
21050 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  );../*.** The in
21060 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
21070 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
21080 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
21090 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
210a0 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
210b0 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
210c0 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
210d0 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
210e0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
210f0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
21100 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
21110 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
21120 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
21130 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
21140 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
21150 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
21160 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
21170 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
21180 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
21190 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
211a0 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
211b0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
211c0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
211d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
211e0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
211f0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
21200 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
21210 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
21220 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
21230 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
21240 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
21250 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
21260 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
21270 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
21280 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
21290 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
212a0 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
212b0 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
212c0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
212d0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
212e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
212f0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
21300 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
21310 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
21320 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
21330 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
21340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21350 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
21360 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21370 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
21380 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21390 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
213a0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
213b0 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
213c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
213d0 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
213e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
213f0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
21400 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21410 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
21420 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
21430 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21440 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
21450 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
21460 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
21470 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
21480 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
21490 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  e*);.   void sql
214a0 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65  ite3VtabDisconne
214b0 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ct(sqlite3 *db, 
214c0 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e  Table *p);.   in
214d0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
214e0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  c(sqlite3 *db, c
214f0 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20  har **);.   int 
21500 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
21510 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
21520 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
21530 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
21540 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
21550 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
21560 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
21570 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
21580 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
21590 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
215a0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
215b0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
215c0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
215d0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
215e0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56   int, int);.   V
215f0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
21600 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
21610 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
21620 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21630 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
21640 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
21650 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
21660 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21670 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
21680 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
21690 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
216a0 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
216b0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
216c0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
216d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
216e0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
216f0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
21700 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
21710 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
21720 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21730 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
21740 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
21750 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
21760 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
21770 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
21780 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
21790 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
217a0 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
217b0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
217c0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
217d0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
217e0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
217f0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21800 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
21810 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
21820 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
21830 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
21840 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
21850 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
21860 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
21870 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
21880 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
21890 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
218a0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e  te3_value**);.in
218b0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
218c0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
218d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
218e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
218f0 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
21900 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
21910 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
21920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
21930 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
21940 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21950 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
21960 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
21970 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21980 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21990 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
219a0 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
219b0 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
219c0 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
219d0 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
219e0 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
219f0 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
21a00 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
21a10 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21a20 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
21a30 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
21a40 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  t(sqlite3*, int,
21a50 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   int, int*, int*
21a60 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
21a70 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76  WalDefaultHook(v
21a80 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
21a90 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
21aa0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
21ab0 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
21ac0 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
21ad0 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
21ae0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
21af0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
21b00 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
21b10 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
21b20 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
21b30 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
21b40 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
21b50 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
21b60 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
21b70 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
21b80 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
21b90 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
21ba0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
21bb0 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
21bc0 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
21bd0 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
21be0 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
21bf0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
21c00 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20  is .** provided 
21c10 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
21c20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
21c30 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
21c40 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
21c50 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
21c60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
21c70 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
21c80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
21c90 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
21ca0 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
21cb0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
21cc0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
21cd0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
21ce0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
21cf0 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
21d00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21d10 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
21d20 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
21d30 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  ist*, int);.  in
21d40 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
21d50 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
21d60 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
21d70 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
21d80 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
21d90 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
21da0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
21db0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
21dc0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
21dd0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
21de0 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e  ,b,c,d).  #defin
21df0 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  e sqlite3FkCheck
21e00 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66  (a,b,c,d).  #def
21e10 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
21e20 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
21e30 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21e40 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
21e50 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
21e60 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
21e70 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64  (a,b,c,d) 0.#end
21e80 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
21e90 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
21ea0 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
21eb0 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
21ec0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
21ed0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
21ee0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
21ef0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
21f00 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
21f10 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
21f20 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
21f30 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
21f40 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
21f50 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
21f60 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
21f70 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
21f80 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
21f90 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
21fa0 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
21fb0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
21fc0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
21fd0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
21fe0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
21ff0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
22000 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
22010 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
22020 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
22030 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
22040 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
22050 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
22060 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
22070 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
22080 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
22090 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
220a0 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
220b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
220c0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
220d0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
220e0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
220f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
22100 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
22110 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
22120 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
22130 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
22140 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22150 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22160 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69  ().#endif..#defi
22170 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
22180 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64  D           1.#d
22190 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
221a0 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32  PH             2
221b0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
221c0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20  X_INDEX_ASC     
221d0 20 20 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    3.#define IN_I
221e0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
221f0 20 20 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74       4.int sqlit
22200 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
22210 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22220 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22230 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22240 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22250 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22260 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22280 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
22290 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
222a0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
222b0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
222c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
222d0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
222e0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
222f0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22300 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
22310 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22320 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22330 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22340 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22350 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22360 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22370 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22380 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22390 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
223a0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
223b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
223c0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
223d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
223e0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
223f0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22400 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22410 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22420 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22430 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22440 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22450 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22460 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22470 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22480 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22490 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
224a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
224b0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
224c0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
224d0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
224e0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
224f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22500 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22510 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22520 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22530 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22540 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22550 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22560 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22570 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22580 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22590 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
225a0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
225b0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
225c0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
225d0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
225e0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
225f0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
22600 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
22610 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
22620 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
22630 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
22640 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
22650 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
22660 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
22670 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
22680 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
22690 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
226a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
226b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
226c0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
226d0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
226e0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
226f0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
22700 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
22710 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
22720 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
22730 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
22740 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
22750 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
22760 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
22770 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
22780 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22790 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
227a0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
227b0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
227c0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
227d0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
227e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
227f0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
22800 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
22810 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
22820 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
22830 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
22840 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
22850 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
22860 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
22870 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
22880 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
22890 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
228a0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
228b0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
228c0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
228d0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
228e0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
228f0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
22900 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
22910 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
22920 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
22930 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
22940 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
22950 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22960 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
22970 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
22980 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
22990 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
229a0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
229b0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
229c0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
229d0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
229e0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
229f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
22a00 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
22a10 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
22a20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
22a30 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
22a40 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
22a50 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
22a60 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
22a70 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
22a80 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22a90 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
22aa0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
22ab0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
22ac0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
22ad0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
22ae0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
22af0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
22b00 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
22b10 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
22b20 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
22b30 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
22b40 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
22b50 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
22b60 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
22b70 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
22b80 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
22b90 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
22ba0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
22bb0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
22bc0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
22bd0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
22be0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
22bf0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
22c00 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
22c10 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
22c20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
22c30 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
22c40 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
22c50 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
22c60 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
22c70 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
22c80 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
22c90 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
22ca0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
22cb0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
22cc0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
22cd0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
22ce0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
22cf0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
22d00 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
22d10 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
22d20 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
22d30 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
22d40 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
22d50 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
22d60 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
22d70 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
22d80 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
22d90 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
22da0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
22db0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
22dc0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
22dd0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
22de0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
22df0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
22e00 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
22e10 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
22e20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
22e30 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
22e40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
22e50 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
22e60 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
22e70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
22e80 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
22e90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22ea0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
22eb0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
22ec0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
22ed0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
22ee0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
22ef0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22f00 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
22f10 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
22f20 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
22f30 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
22f40 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
22f50 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
22f60 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
22f70 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
22f80 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
22f90 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
22fa0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
22fb0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
22fc0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
22fd0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
22fe0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
22ff0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23000 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23010 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23020 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23030 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23040 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23050 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23060 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23070 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23080 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.