/ Hex Artifact Content
Login

Artifact e4cb0c8700ca77889570bf30cf75a5c56f297615:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
16e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
16f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
1700: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
1710: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
1720: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
1730: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1740: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1760: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1770: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1780: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1790: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
17b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
17c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
17d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
17e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
17f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
1800: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
1810: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
1820: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
1830: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
1840: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
1850: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
1860: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
1870: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
1880: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1890: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
18a0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
18b0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
18c0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
18d0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
18e0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18f0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1900: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
1910: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1920: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
1930: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
1940: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1950: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1960: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
1970: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
1980: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1990: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
19a0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
19b0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
19c0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
19d0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
19e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
19f0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
1a00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
1a10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
1a20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1a30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
1a40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
1a50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
1a60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
1a70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
1a80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
1a90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
1aa0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
1ab0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
1ac0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
1ad0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
1ae0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1af0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1b00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1b10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1b20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
1b30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1b40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
1b50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1b60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1b70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1b80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1b90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ba0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1bb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1bc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1bd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1be0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1bf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1c00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1c10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1c20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1c30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1c40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
1c50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
1c60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
1c70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1c80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
1c90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
1ca0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
1cb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
1cc0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
1cd0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
1ce0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
1cf0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
1d00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
1d10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
1d20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
1d30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
1d40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
1d50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
1d60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
1d70: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47  .# define NDEBUG
1d80: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   1.#endif.#if de
1d90: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1da0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1db0: 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e  DEBUG).# undef N
1dc0: 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a  DEBUG.#endif../*
1dd0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
1de0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1df0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
1e00: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
1e10: 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76  en .** doing cov
1e20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74  erage testing, t
1e30: 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73  he condition ins
1e40: 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ide the argument
1e50: 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28   to.** testcase(
1e60: 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61  ) must be evalua
1e70: 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e  ted both true an
1e80: 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72  d false in order
1e90: 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20   to.** get full 
1ea0: 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e  branch coverage.
1eb0: 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29    The testcase()
1ec0: 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74   macro is insert
1ed0: 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e  ed.** to help en
1ee0: 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65  sure adequate te
1ef0: 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70  st coverage in p
1f00: 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70  laces where simp
1f10: 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f  le.** condition/
1f20: 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67  decision coverag
1f30: 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e  e is inadequate.
1f40: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
1f50: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1f60: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
1f70: 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76   sure boundary v
1f80: 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64  alues are tested
1f90: 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73  .  For.** bitmas
1fa0: 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73  k tests, testcas
1fb0: 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20  e() can be used 
1fc0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63  to make sure eac
1fd0: 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e  h bit.** is sign
1fe0: 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64  ificant and used
1ff0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20   at least once. 
2000: 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65   On switch state
2010: 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d  ments.** where m
2020: 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f  ultiple cases go
2030: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f   to the same blo
2040: 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74  ck of code, test
2050: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e  case().** can in
2060: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61  sure that all ca
2070: 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ses are evaluate
2080: 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20  d..**.*/.#ifdef 
2090: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
20a0: 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
20b0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29  te3Coverage(int)
20c0: 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  ;.# define testc
20d0: 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b  ase(X)  if( X ){
20e0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20f0: 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65  (__LINE__); }.#e
2100: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73  lse.# define tes
2110: 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a  tcase(X).#endif.
2120: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f  ./*.** The TESTO
2130: 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65  NLY macro is use
2140: 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72  d to enclose var
2150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
2160: 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62  ns or.** other b
2170: 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74  its of code that
2180: 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73   are needed to s
2190: 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d  upport the argum
21a0: 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  ents.** within t
21b0: 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73  estcase() and as
21c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a  sert() macros..*
21d0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
21e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f0: 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  d(SQLITE_COVERAG
2200: 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  E_TEST).# define
2210: 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a   TESTONLY(X)  X.
2220: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54  #else.# define T
2230: 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  ESTONLY(X).#endi
2240: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d  f../*.** Sometim
2250: 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61  es we need a sma
2260: 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64  ll amount of cod
2270: 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69  e such as a vari
2280: 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  able initializat
2290: 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20  ion.** to setup 
22a0: 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65  for a later asse
22b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20  rt() statement. 
22c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
22d0: 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20  this code to.** 
22e0: 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65  appear when asse
22f0: 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64  rt() is disabled
2300: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2310: 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66   macro is theref
2320: 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  ore.** used to c
2330: 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75  ontain that setu
2340: 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56  p code.  The "VV
2350: 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64  A" acronym stand
2360: 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69  s for.** "Verifi
2370: 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
2380: 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74  on, and Accredit
2390: 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65  ation".  In othe
23a0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20  r words, the.** 
23b0: 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f  code within VVA_
23c0: 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79  ONLY() will only
23d0: 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69   run during veri
23e0: 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  fication process
23f0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e  es..*/.#ifndef N
2400: 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56  DEBUG.# define V
2410: 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  VA_ONLY(X)  X.#e
2420: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41  lse.# define VVA
2430: 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  _ONLY(X).#endif.
2440: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59  ./*.** The ALWAY
2450: 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72  S and NEVER macr
2460: 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c  os surround bool
2470: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ean expressions 
2480: 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e  which .** are in
2490: 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73  tended to always
24a0: 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73   be true or fals
24b0: 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
24c0: 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73    Such.** expres
24d0: 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f  sions could be o
24e0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
24f0: 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e  code completely.
2500: 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72    But they.** ar
2510: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20  e included in a 
2520: 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64  few cases in ord
2530: 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68  er to enhance th
2540: 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20  e resilience.** 
2550: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65  of SQLite to une
2560: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
2570: 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63   - to make the c
2580: 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e  ode "self-healin
2590: 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c  g".** or "ductil
25a0: 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  e" rather than b
25b0: 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61  eing "brittle" a
25c0: 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74  nd crashing at t
25d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74  he first.** hint
25e0: 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65   of unplanned be
25f0: 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e  havior..**.** In
2600: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c   other words, AL
2610: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2620: 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66  re added for def
2630: 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a  ensive code..**.
2640: 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f  ** When doing co
2650: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41  verage testing A
2660: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
2670: 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74  are hard-coded t
2680: 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64  o.** be true and
2690: 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74   false so that t
26a0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  he unreachable c
26b0: 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79  ode they specify
26c0: 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20   will.** not be 
26d0: 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73  counted as untes
26e0: 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ted code..*/.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2710: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2720: 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66  )      (1).# def
2730: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2740: 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65     (0).#elif !de
2750: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
2760: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2770: 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73        ((X)?1:(as
2780: 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65  sert(0),0)).# de
2790: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27a0: 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74      ((X)?(assert
27b0: 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a  (0),1):0).#else.
27c0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
27d0: 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65  X)      (X).# de
27e0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27f0: 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a      (X).#endif..
2800: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2810: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
2820: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69  the input is a i
2830: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
2840: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
2850: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
2860: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
2870: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
2880: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
2890: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
28a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
28b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
28c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
28d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
28e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
28f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
2900: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
2910: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
2920: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
2930: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
2940: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
2950: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
2960: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
2970: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
2980: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
2990: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
29b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
29c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
29d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
29e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
29f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
2a00: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
2a10: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
2a20: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
2a30: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
2a40: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
2a50: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
2a60: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
2a70: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
2a80: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
2a90: 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ".#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3c00: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
3c10: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
3c20: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
3c30: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
3c40: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
3c50: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
3c60: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
3c70: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
3c80: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
3c90: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
3ca0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3cb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
3cc0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
3cd0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
3ce0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
3cf0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
3d20: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
3d30: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
3d40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3d50: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
3d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
3d70: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
3d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
3d90: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
3da0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
3db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3dc0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
3dd0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3de0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
3df0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
3e00: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
3e10: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
3e20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3e30: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
3e40: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
3e50: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
3e60: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
3e70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
3e80: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
3e90: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
3ea0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
3eb0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3ec0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
3ed0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
3ee0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
3ef0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
3f00: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
3f10: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
3f20: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
3f30: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
3f40: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
3f50: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
3f60: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
3f70: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
3f80: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
3f90: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
3fa0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
3fb0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
3fc0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
3fd0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
3fe0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
3ff0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4000: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4010: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4020: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4030: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4040: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4050: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4070: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4080: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4090: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
40a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
40b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
40c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
40d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
40e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
40f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4100: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4110: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4120: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4130: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4140: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4150: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4160: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4170: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4180: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4190: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
41a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
41b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
41c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
41d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
41e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
41f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4200: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4210: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4220: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4230: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4240: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4250: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4260: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4270: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4280: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4290: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
42a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
42b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
42c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
42d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
42e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
42f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4300: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4310: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4320: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4330: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4340: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4350: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4360: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4370: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4380: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4390: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
43a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
43b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
43c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
43d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
43e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
43f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4400: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4410: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4420: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4430: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4440: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4460: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4470: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4480: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4490: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
44a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
44b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
44c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
44d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
44e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
44f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4500: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4510: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4520: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4530: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4540: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4550: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4560: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4570: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4580: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
45a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
45b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
45c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
45d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
45e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
45f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4690: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
46a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
46b0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
46c0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
46f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4710: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4720: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4730: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4740: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4750: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4760: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4770: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
4780: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
4790: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
47a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
47b0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
47c0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
47d0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
47e0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
47f0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
4800: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
4810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4820: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4830: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
4840: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
4850: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4860: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
4870: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4880: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4890: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
48a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
48b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
48c0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
48d0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
48e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
48f0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
4900: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4910: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
4920: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
4930: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
4940: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
4950: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
4960: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
4970: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
4980: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
4990: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
49a0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
49b0: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
49c0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
49d0: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
49e0: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
49f0: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
4a00: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
4a10: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
4a20: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
4a30: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
4a40: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
4a50: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
4a60: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
4a70: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
4a80: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
4a90: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
4aa0: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
4ab0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
4ac0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
4ad0: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
4ae0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
4af0: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
4b00: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
4b10: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4b20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
4b30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4b40: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
4b50: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4b60: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4b80: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
4b90: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
4ba0: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
4bb0: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
4bc0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
4bd0: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
4be0: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
4bf0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
4c00: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
4c10: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
4c20: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
4c30: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
4c40: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
4c50: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
4c60: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
4c70: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
4c80: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
4c90: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
4ca0: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
4cb0: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
4cc0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4cd0: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
4ce0: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
4cf0: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
4d00: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
4d10: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
4d20: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
4d30: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
4d40: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
4d50: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
4d60: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
4d70: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
4d80: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
4d90: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
4da0: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
4db0: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
4dc0: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
4dd0: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
4de0: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
4df0: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
4e00: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
4e10: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
4e20: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
4e30: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
4e40: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
4e50: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
4e60: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
4e70: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
4e80: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
4e90: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
4ea0: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
4eb0: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
4ec0: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
4ed0: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
4ee0: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
4ef0: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
4f00: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
4f10: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
4f20: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
4f30: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
4f40: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
4f50: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
4f60: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
4f70: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
4f80: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
4f90: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
4fa0: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
4fb0: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
4fc0: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
4fd0: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
4fe0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
4ff0: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
5000: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
5010: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
5020: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
5030: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
5040: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
5050: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
5060: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
5070: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
5080: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
5090: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
50a0: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
50b0: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
50c0: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
50d0: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
50e0: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
50f0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
5100: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
5110: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
5120: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
5130: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
5140: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
5150: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
5160: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
5170: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
5180: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
5190: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
51a0: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
51b0: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
51c0: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
51d0: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
51e0: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
51f0: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
5200: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
5210: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
5220: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
5230: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
5240: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
5250: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
5260: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
5270: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
5280: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
5290: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
52a0: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
52b0: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
52c0: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
52d0: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
52e0: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
52f0: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
5300: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
5310: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
5320: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
5330: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5340: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
5350: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
5360: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
5370: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
5380: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5390: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
53a0: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
53b0: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
53c0: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
53d0: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
53e0: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
53f0: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
5400: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
5410: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
5420: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
5430: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
5440: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
5450: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
5460: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5470: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
5480: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5490: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
54a0: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
54b0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
54c0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
54d0: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
54e0: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
54f0: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
5500: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
5510: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
5520: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
5530: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
5540: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
5550: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
5560: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
5570: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
5580: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
5590: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
55a0: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
55b0: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
55c0: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
55d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
55e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
55f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
5600: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
5610: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
5620: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
5630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
5640: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
5650: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
5660: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
5670: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
5680: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
5690: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
56a0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
56b0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
56c0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
56d0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
56e0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
56f0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
5700: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
5710: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
5720: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
5730: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
5740: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
5750: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
5760: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
5770: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
5780: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
5790: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
57a0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
57b0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
57c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
57d0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
57e0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
57f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
5800: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
5810: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
5820: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
5830: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
5840: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
5850: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
5860: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
5870: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
5880: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
5890: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
58a0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
58b0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
58c0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
58d0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
58e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
58f0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
5900: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5910: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
5920: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
5930: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
5940: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
5950: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5960: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
5990: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
59a0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
59b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
59c0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
59d0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
59e0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
59f0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
5a00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5a10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
5a20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5a30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
5a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
5a60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
5a70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
5a80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
5a90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5aa0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
5ab0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5ac0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
5ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ae0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
5af0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5b00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
5b10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5b20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
5b30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5b40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
5b50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
5b60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
5b70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
5b80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
5b90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
5ba0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
5bb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
5bc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
5bd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
5be0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5bf0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
5c00: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
5c10: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
5c20: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
5c30: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
5c40: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
5c50: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
5c60: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
5c70: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
5c80: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
5c90: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
5ca0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
5cb0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
5cc0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
5cd0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
5ce0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
5cf0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5d00: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
5d10: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
5d20: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
5d30: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5d40: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
5d50: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
5d60: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
5d70: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
5d80: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
5d90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5da0: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
5db0: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
5dc0: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
5dd0: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
5de0: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
5df0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
5e00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
5e10: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
5e20: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
5e30: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
5e40: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
5e50: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
5e60: 72 65 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44  reInfo;../*.** D
5e70: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
5e80: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
5e90: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
5ea0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
5eb0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
5ec0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5ed0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5ee0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5ef0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5f00: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5f10: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5f20: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5f30: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5f40: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5f50: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5f60: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5f70: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5f80: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5f90: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5fa0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5fb0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5fc0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5fd0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5fe0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5ff0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
6000: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
6010: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
6020: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
6030: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
6040: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
6050: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
6060: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
6070: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
6080: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
6090: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
60a0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
60b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
60c0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
60d0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
60e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
60f0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6100: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6110: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
6120: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
6130: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
6140: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
6150: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
6160: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
6170: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
6180: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
6190: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
61a0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
61b0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
61c0: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
61d0: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
61e0: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
61f0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6200: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6210: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
6220: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
6230: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
6240: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
6250: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
6260: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
6270: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
6280: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
6290: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
62a0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
62b0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
62c0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
62d0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
62e0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
62f0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
6300: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
6310: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
6320: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
6330: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
6340: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
6350: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
6360: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
6370: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
6380: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
6390: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
63a0: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
63b0: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
63c0: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
63d0: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
63e0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
63f0: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
6400: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
6410: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6420: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
6430: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
6440: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
6450: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
6460: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
6470: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
6480: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
6490: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
64a0: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
64b0: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
64c0: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
64d0: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
64e0: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
64f0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
6500: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
6510: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
6520: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
6530: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
6540: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
6550: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
6560: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
6570: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
6580: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
6590: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
65a0: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
65b0: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
65c0: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
65d0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
65e0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
65f0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
6600: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
6610: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
6620: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
6630: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
6640: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
6650: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
6660: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
6670: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
6680: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
6690: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
66a0: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
66b0: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
66c0: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
66d0: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
66e0: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
66f0: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
6700: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
6710: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
6720: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
6730: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
6740: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6760: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
6770: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
6780: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
6790: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
67a0: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
67b0: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
67c0: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
67d0: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
67e0: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
67f0: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
6800: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
6810: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
6820: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
6830: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
6840: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
6850: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
6860: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
6870: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
6880: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
6890: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
68a0: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
68b0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
68c0: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
68d0: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
68e0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
68f0: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
6900: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
6910: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
6920: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6930: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
6940: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
6950: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
6960: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6970: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
6980: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
6990: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
69a0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
69b0: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
69c0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
69d0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
69e0: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
69f0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
6a00: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
6a10: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
6a20: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
6a30: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
6a40: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
6a50: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
6a60: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
6a70: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
6a80: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
6a90: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6aa0: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6ab0: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6ac0: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6ad0: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6ae0: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6af0: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
6b00: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
6b10: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
6b20: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
6b30: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
6b40: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
6b50: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6b60: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6b70: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6b80: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6b90: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6ba0: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6bb0: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6bc0: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6bd0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6be0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6bf0: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
6c00: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
6c10: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
6c20: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
6c30: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
6c40: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
6c50: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6c60: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6c70: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6c80: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6c90: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6ca0: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6cb0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6cc0: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6cd0: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6ce0: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6cf0: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
6d00: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6d10: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6d20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6d30: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
6d40: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
6d50: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6d60: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6d70: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6d80: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6d90: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6da0: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6db0: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6dc0: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6dd0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6de0: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6df0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
6e00: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
6e10: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
6e20: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
6e30: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
6e40: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
6e50: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6e60: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6e70: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6e80: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6e90: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6ea0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6eb0: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6ec0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6ed0: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6ee0: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6ef0: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
6f00: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
6f10: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
6f20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
6f30: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
6f40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
6f50: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6f60: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6f70: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6f80: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6f90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6fa0: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6fb0: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6fc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6fd0: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6fe0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6ff0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
7000: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
7010: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
7020: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
7030: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
7040: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
7050: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
7060: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
7070: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
7080: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
7090: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
70a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
70b0: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
70c0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
70d0: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
70e0: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
70f0: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
7100: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7110: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
7120: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
7130: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
7140: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
7150: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
7160: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
7170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7180: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
7190: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
71a0: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
71b0: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
71c0: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
71d0: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
71e0: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
71f0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
7200: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
7210: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
7220: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
7230: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
7240: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
7250: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
7260: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
7270: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
7280: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
7290: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
72a0: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
72b0: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
72c0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
72d0: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
72e0: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
72f0: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
7300: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
7310: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
7320: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
7330: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
7340: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
7350: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
7360: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
7370: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
7380: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
7390: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
73a0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
73b0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
73c0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
73d0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
73e0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
73f0: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
7400: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
7410: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
7420: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
7430: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
7440: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
7450: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7460: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
7470: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
7480: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7490: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
74a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
74b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
74c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
74d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
74e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
74f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
7500: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
7510: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
7520: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
7530: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
7540: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
7550: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
7560: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
7570: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
7580: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
7590: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
75a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
75b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
75d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
75e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7600: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
7610: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
7620: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
7630: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
7640: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
7650: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
7660: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
7670: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7690: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
76a0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
76b0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
76c0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
76e0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
76f0: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
7700: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
7710: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
7720: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
7730: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
7740: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
7750: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
7760: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
7770: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
7780: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
7790: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
77b0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
77c0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
77d0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
77e0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7800: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
7810: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
7820: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
7830: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
7840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7850: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
7860: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
7870: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
7880: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
7890: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
78a0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
78b0: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
78c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
78d0: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
78e0: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
78f0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
7900: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
7910: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7920: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
7930: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
7940: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
7950: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
7960: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
7970: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
7980: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
7990: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
79a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
79b0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
79c0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
79d0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
79e0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
79f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
7a00: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
7a10: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
7a20: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
7a30: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
7a40: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
7a50: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
7a60: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
7a70: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
7a80: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
7a90: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
7aa0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
7ab0: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
7ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ad0: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7ae0: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
7af0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
7b00: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7b30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
7b40: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7b50: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7b70: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7b80: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7b90: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7ba0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
7bb0: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
7bc0: 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63  imits */.  struc
7bd0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
7be0: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
7bf0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
7c00: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
7c10: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
7c20: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
7c30: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
7c40: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
7c50: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
7c60: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
7c90: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
7ca0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
7cb0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
7cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
7cd0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
7ce0: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
7cf0: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
7d00: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
7d10: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
7d20: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
7d30: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
7d40: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
7d50: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
7d60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7d70: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
7d80: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
7d90: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7db0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7dc0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
7dd0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
7de0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e00: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7e10: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
7e20: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
7e30: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
7e60: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
7e70: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
7e80: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7ea0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
7eb0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
7ec0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7ee0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
7ef0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
7f00: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
7f10: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
7f20: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
7f30: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
7f40: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
7f50: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7f70: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
7f80: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
7f90: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
7fa0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
7fb0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
7fc0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
7fd0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7fe0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8010: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
8020: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8030: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
8040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8050: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
8060: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
8070: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
8080: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
8090: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
80a0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
80b0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
80c0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
80d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
80e0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
80f0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
8100: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
8110: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
8120: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
8130: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
8140: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
8150: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
8160: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
8170: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
8180: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8190: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
81a0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
81b0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
81c0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
81d0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
81e0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
81f0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
8200: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
8210: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
8220: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
8230: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8240: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
8250: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
8260: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
8270: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
8280: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
8290: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
82a0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
82b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
82c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
82d0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
82e0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
82f0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
8300: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
8310: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
8320: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
8330: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
8340: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
8350: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
8360: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
8370: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
8380: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
8390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
83a0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
83b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
83c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
83d0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
83e0: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
83f0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8400: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8410: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8420: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8450: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
8460: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
8470: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
8480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8490: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
84a0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
84b0: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
84c0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
84d0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
84e0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
84f0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
8500: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
8510: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
8520: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
8530: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
8540: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8550: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
8560: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8570: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
8580: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
8590: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
85a0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
85b0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
85c0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
85d0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
85e0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
85f0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
8600: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
8610: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
8620: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
8630: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
8640: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
8650: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
8660: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
8670: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
8680: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
8690: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
86a0: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
86b0: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
86c0: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
86d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
86e0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
86f0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
8700: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
8710: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
8720: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
8730: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
8740: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
8750: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
8760: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
8770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
8780: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
8790: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
87a0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
87b0: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
87c0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
87d0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
87e0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
87f0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
8800: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
8810: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
8820: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
8830: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
8840: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
8850: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
8860: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
8870: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
8880: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8890: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
88a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
88b0: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
88c0: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
88d0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
88e0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
88f0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8900: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8910: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
8920: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
8930: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
8940: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
8950: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8960: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
8970: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
8980: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8990: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
89a0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
89b0: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
89c0: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
89d0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
89e0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
89f0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
8a00: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
8a10: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
8a20: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
8a30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8a40: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
8a50: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
8a60: 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64  bFree() */..#ifd
8a70: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8a80: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
8a90: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
8aa0: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
8ab0: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
8ac0: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
8ad0: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
8ae0: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
8af0: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
8b00: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
8b10: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
8b20: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
8b30: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
8b40: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
8b50: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
8b60: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
8b70: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
8b80: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
8b90: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
8ba0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
8bb0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8bc0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
8bd0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
8be0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
8bf0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
8c00: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
8c10: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
8c20: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
8c30: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
8c40: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
8c50: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
8c60: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
8c70: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
8c80: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
8c90: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
8ca0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
8cb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
8cc0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
8cd0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
8ce0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
8cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
8d00: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
8d10: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
8d20: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
8d30: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
8d40: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
8d50: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
8d60: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
8d70: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
8d80: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
8d90: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
8da0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
8db0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
8dc0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
8dd0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
8de0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
8df0: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
8e00: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
8e10: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a  Schema->enc)../*
8e20: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
8e30: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
8e40: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
8e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
8e60: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
8e70: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
8e80: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
8e90: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
8ea0: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
8eb0: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
8ec0: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
8ed0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
8ee0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
8ef0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
8f00: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
8f10: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
8f20: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
8f30: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
8f40: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
8f50: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
8f60: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
8f70: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
8f80: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
8f90: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
8fa0: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
8fb0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
8fc0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
8fd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
8fe0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
8ff0: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
9000: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
9010: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
9020: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
9030: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
9040: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
9050: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
9060: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
9070: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9080: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
9090: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
90a0: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
90b0: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
90f0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
9100: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9130: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
9140: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
9150: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9160: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
9170: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
9180: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
9190: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
91a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91d0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
91e0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
91f0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
9200: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
9210: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
9220: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
9230: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
9240: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
9250: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
9260: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
9270: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
9280: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
9290: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
92a0: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
92b0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
92c0: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
92d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
92e0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
92f0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
9300: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
9310: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
9320: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9330: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
9340: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
9350: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
9360: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
9370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9380: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
9390: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
93a0: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
93b0: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
93c0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
93d0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
93e0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
93f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
9400: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
9410: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
9420: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
9430: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
9440: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
9450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
9460: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
9470: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
9480: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
9490: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
94a0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
94b0: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
94c0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
94d0: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
94e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
94f0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
9500: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
9510: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
9520: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
9530: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9540: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
9550: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9560: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
9570: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
9580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
9590: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
95a0: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
95b0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
95c0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
95d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
95e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
95f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
9600: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
9610: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
9620: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
9630: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
9640: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
9650: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
9660: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
9670: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9680: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
9690: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
96a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
96b0: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
96c0: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
96d0: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
96e0: 68 61 6e 67 65 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  hanges */.../*.*
96f0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
9700: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
9710: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
9720: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
9730: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
9740: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
9750: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
9760: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
9770: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
9780: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
9790: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
97a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
97b0: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
97c0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
97d0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
97e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
97f0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
9800: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
9810: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
9820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
9830: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
9840: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
9850: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
9860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9870: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
9880: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
9890: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
98a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98b0: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20  E_IdxRealAsInt  
98c0: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f   0x0010   /* Sto
98d0: 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69  re REAL as INT i
98e0: 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65  n indices */.#de
98f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
9900: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
9910: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
9920: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9930: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9940: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
9950: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
9960: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
9970: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9980: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
9990: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
99a0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
99b0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
99c0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
99d0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
99e0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
99f0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
9a00: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
9a10: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
9a20: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
9a30: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
9a40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
9a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
9a60: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
9a70: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
9a80: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
9a90: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
9aa0: 53 51 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20  SQLITE_Stat3    
9ab0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
9ac0: 2a 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45  * Use the SQLITE
9ad0: 5f 53 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a  _STAT3 table */.
9ae0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
9af0: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
9b00: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
9b10: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
9b20: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
9b30: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
9b40: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
9b50: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
9b60: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
9b70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9b80: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
9b90: 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  ST.#define Optim
9ba0: 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28  izationDisabled(
9bb0: 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62  db, mask)  (((db
9bc0: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
9bd0: 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  ask))!=0).#defin
9be0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
9bf0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
9c00: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9c10: 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29  lags&(mask))==0)
9c20: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
9c30: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
9c40: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30  led(db, mask)  0
9c50: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9c60: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9c70: 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69   mask)   1.#endi
9c80: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  f../*.** Possibl
9c90: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
9ca0: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
9cb0: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
9cc0: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
9cd0: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
9ce0: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
9cf0: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
9d00: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
9d10: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
9d20: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
9d30: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
9d40: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
9d50: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
9d60: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
9d70: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9d80: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
9d90: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
9da0: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
9db0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9dc0: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
9dd0: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
9de0: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
9df0: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
9e00: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
9e10: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
9e20: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
9e30: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
9e40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9e50: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
9e60: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
9e70: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
9e80: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
9e90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9ea0: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
9eb0: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
9ec0: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
9ed0: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
9ee0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
9ef0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
9f00: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
9f10: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9f20: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
9f30: 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  e.  A pointer to
9f40: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
9f50: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
9f60: 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a   sqlite.aFunc.**
9f70: 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68   hash table.  Wh
9f80: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63  en multiple func
9f90: 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73  tions have the s
9fa0: 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61  ame name, the ha
9fb0: 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e  sh table.** poin
9fc0: 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c  ts to a linked l
9fd0: 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72  ist of these str
9fe0: 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75  uctures..*/.stru
9ff0: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
a000: 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  16 nArg;        
a010: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a020: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
a030: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
a040: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
a050: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
a060: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
a070: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
a080: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
a090: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
a0a0: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
a0b0: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
a0c0: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
a0d0: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
a0e0: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
a0f0: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
a100: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
a110: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
a120: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
a130: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a140: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
a150: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
a160: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
a170: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
a180: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
a190: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
a1a0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1c0: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
a1d0: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
a1e0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
a1f0: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
a200: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
a210: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
a220: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
a230: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
a240: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
a250: 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65  hash */.  FuncDe
a260: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
a270: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
a280: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
a290: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
a2a0: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  n */.};../*.** T
a2b0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e  his structure en
a2c0: 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65  capsulates a use
a2d0: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72  r-function destr
a2e0: 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28  uctor callback (
a2f0: 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  as.** configured
a300: 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75   using create_fu
a310: 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64  nction_v2()) and
a320: 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75   a reference cou
a330: 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72  nter. When.** cr
a340: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
a350: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  () is called to 
a360: 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f  create a functio
a370: 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63  n with a destruc
a380: 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  tor,.** a single
a390: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
a3a0: 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  type is allocate
a3b0: 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  d. FuncDestructo
a3c0: 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f  r.nRef is set to
a3d0: 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20   .** the number 
a3e0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
a3f0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
a400: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
a410: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
a420: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
a430: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
a440: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
a450: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
a460: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
a470: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
a480: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
a490: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
a4a0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
a4b0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
a4c0: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
a4d0: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
a4e0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
a4f0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
a500: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
a510: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
a520: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
a530: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
a540: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
a550: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
a560: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
a570: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
a580: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
a590: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
a5a0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
a5b0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
a5c0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
a5d0: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
a5e0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
a5f0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
a600: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
a610: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
a620: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
a630: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
a640: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
a650: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
a660: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
a670: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
a680: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
a690: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
a6a0: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
a6b0: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
a6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a6d0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
a6e0: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
a6f0: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
a700: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
a710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a720: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
a730: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
a740: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
a750: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
a760: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a770: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38  C_CASE     0x008
a780: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
a790: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
a7a0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
a7b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
a7c0: 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45  EM    0x010 /* E
a7d0: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
a7e0: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
a7f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a800: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32  NC_NEEDCOLL 0x02
a810: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
a820: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
a830: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
a840: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a850: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
a860: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
a870: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
a880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a890: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
a8a0: 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d   0x080 /* Built-
a8b0: 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  in typeof() func
a8c0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
a8d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
a8e0: 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75  T    0x100 /* Bu
a8f0: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
a900: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
a910: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a920: 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20  _COALESCE 0x200 
a930: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
a940: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
a950: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
a960: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
a970: 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c  LY 0x400 /* Buil
a980: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
a990: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  function */../*.
a9a0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
a9b0: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
a9c0: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
a9d0: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
a9e0: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
a9f0: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
aa00: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
aa10: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
aa20: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
aa30: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
aa40: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
aa50: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
aa60: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
aa70: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
aa80: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
aa90: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
aaa0: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
aab0: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
aac0: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
aad0: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
aae0: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
aaf0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
ab00: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
ab10: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
ab20: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
ab30: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
ab40: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
ab50: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
ab60: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20  he function. If 
ab70: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
ab80: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
ab90: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
aba0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
abb0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
abc0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
abd0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
abe0: 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
abf0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
ac00: 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
ac10: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
ac20: 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
ac30: 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
ac40: 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
ac50: 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
ac60: 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
ac70: 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
ac80: 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
ac90: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
aca0: 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
acb0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
acc0: 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
acd0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
ace0: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
acf0: 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
ad00: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
ad10: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
ad20: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
ad30: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
ad40: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74  ame .**     that
ad50: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
ad60: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
ad70: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
ad80: 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20  call to C .**   
ad90: 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46    function likeF
ada0: 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41  unc. Argument pA
adb0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
adc0: 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64  (void *) and mad
add0: 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62  e.**     availab
ade0: 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69  le as the functi
adf0: 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  on user-data (sq
ae00: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
ae10: 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46  )). The.**     F
ae20: 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72  uncDef.flags var
ae30: 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
ae40: 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64  the value passed
ae50: 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a   as the flags.**
ae60: 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a       parameter..
ae70: 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  */.#define FUNCT
ae80: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
ae90: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
aea0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
aeb0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
aec0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
aed0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
aee0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
aef0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
af00: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
af10: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
af20: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
af30: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
af40: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
af50: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
af60: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
af70: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
af80: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
af90: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
afa0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
afb0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
afc0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
afd0: 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
afe0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
aff0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
b000: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
b010: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
b020: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
b030: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
b040: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
b050: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
b060: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
b070: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
b080: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
b090: 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
b0a0: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
b0b0: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
b0c0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
b0d0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
b0e0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
b0f0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
b100: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
b110: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
b120: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
b130: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
b140: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
b150: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
b160: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
b170: 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  ,0}../*.** All c
b180: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
b190: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
b1a0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
b1b0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
b1c0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
b1d0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
b1e0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
b1f0: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
b200: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
b210: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
b220: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
b230: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
b240: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
b250: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
b260: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
b270: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
b280: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b2a0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
b2b0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
b2c0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
b2d0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
b2e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b2f0: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
b300: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
b310: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
b320: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
b330: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b340: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
b350: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
b360: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b380: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
b390: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
b3a0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
b3b0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
b3c0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
b3d0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
b3e0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
b3f0: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
b400: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
b410: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
b420: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
b430: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
b440: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
b450: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
b460: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
b470: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
b480: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
b490: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
b4a0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
b4b0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
b4c0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
b4d0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
b4e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
b4f0: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
b500: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
b510: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
b520: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
b530: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
b540: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
b550: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
b560: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
b570: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
b580: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b5a0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
b5b0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
b5c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
b5d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
b5f0: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
b600: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
b610: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
b620: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
b630: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
b640: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
b650: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
b660: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
b670: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
b680: 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
b690: 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
b6a0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
b6b0: 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
b6c0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
b6d0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b6e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
b6f0: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  is column */.  E
b700: 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
b710: 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
b720: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
b730: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74  */.  char *zDflt
b740: 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61  ;     /* Origina
b750: 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65  l text of the de
b760: 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20  fault value */. 
b770: 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20   char *zType;   
b780: 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66    /* Data type f
b790: 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  or this column *
b7a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b  /.  char *zColl;
b7b0: 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e       /* Collatin
b7c0: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20  g sequence.  If 
b7d0: 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65  NULL, use the de
b7e0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f  fault */.  u8 no
b7f0: 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41  tNull;      /* A
b800: 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68  n OE_ code for h
b810: 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55  andling a NOT NU
b820: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
b830: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
b840: 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68  ;   /* One of th
b850: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e  e SQLITE_AFF_...
b860: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
b870: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a   colFlags;    /*
b880: 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74   Boolean propert
b890: 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41  ies.  See COLFLA
b8a0: 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77  G_ defines below
b8b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77   */.};../* Allow
b8c0: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f  ed values for Co
b8d0: 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a  lumn.colFlags:.*
b8e0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
b8f0: 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30  G_PRIMKEY  0x000
b900: 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69  1    /* Column i
b910: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  s part of the pr
b920: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
b930: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44  fine COLFLAG_HID
b940: 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20  DEN   0x0002    
b950: 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75  /* A hidden colu
b960: 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20  mn in a virtual 
b970: 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  table */../*.** 
b980: 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
b990: 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
b9a0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
b9b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b9c0: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
b9d0: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
b9e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b9f0: 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
ba00: 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
ba10: 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
ba20: 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
ba30: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
ba40: 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
ba50: 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
ba60: 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
ba70: 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
ba80: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ba90: 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
baa0: 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
bab0: 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
bac0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
bad0: 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
bae0: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
baf0: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
bb00: 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
bb10: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
bb20: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
bb30: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
bb40: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
bb50: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
bb60: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
bb70: 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
bb80: 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
bb90: 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
bba0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
bbb0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
bbc0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
bbd0: 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
bbe0: 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
bbf0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
bc00: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
bc10: 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
bc20: 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
bc30: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
bc40: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
bc50: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
bc60: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
bc70: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
bc80: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
bc90: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
bca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bcb0: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
bcc0: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
bcd0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
bce0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
bcf0: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
bd00: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
bd10: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
bd20: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
bd30: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
bd40: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
bd50: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
bd60: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
bd70: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
bd80: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
bd90: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
bda0: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
bdb0: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
bdc0: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
bdd0: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
bde0: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
bdf0: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
be00: 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68  in with 'a'.  Th
be10: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
be20: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
be30: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
be40: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
be50: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
be60: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
be70: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
be80: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
be90: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
bea0: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
beb0: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
bec0: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
bed0: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
bee0: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
bef0: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
bf00: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23  comparison..*/.#
bf10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bf20: 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23  F_TEXT     'a'.#
bf30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bf40: 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23  F_NONE     'b'.#
bf50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bf60: 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23  F_NUMERIC  'c'.#
bf70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bf80: 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23  F_INTEGER  'd'.#
bf90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bfa0: 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a  F_REAL     'e'..
bfb0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
bfc0: 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
bfd0: 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
bfe0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
bff0: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
c000: 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
c010: 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
c020: 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
c030: 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
c040: 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65  y value. .*/.#de
c050: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c060: 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f  MASK     0x67../
c070: 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
c080: 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
c090: 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
c0a0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
c0b0: 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
c0c0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
c0d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0e0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
c0f0: 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  08  /* jumps if 
c100: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
c110: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
c120: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
c130: 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53        0x10  /* S
c140: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
c150: 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
c160: 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
c170: 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
c180: 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
c190: 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  NULL=NULL */../*
c1a0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
c1b0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
c1c0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
c1d0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
c1e0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
c1f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
c200: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
c210: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
c220: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
c230: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
c240: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
c250: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
c260: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
c270: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
c280: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
c290: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
c2a0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
c2b0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
c2c0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
c2d0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
c2e0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
c2f0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
c300: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
c310: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
c320: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
c330: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
c340: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
c350: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
c360: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
c370: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
c380: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
c390: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
c3a0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
c3b0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
c3c0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
c3d0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c3e0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
c3f0: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
c400: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
c410: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
c420: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
c430: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
c440: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
c450: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
c460: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
c470: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c480: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
c490: 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
c4a0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
c4b0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
c4c0: 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
c4d0: 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68   tables .** with
c4e0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
c4f0: 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
c500: 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
c510: 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20  the callers .** 
c520: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
c530: 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
c540: 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
c550: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
c560: 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  e .** connection
c570: 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f   as that used to
c580: 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65   execute SQL ope
c590: 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76  rations on the v
c5a0: 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  irtual table..**
c5b0: 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f  .** All VTable o
c5c0: 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72  bjects that corr
c5d0: 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67  espond to a sing
c5e0: 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68  le table in a sh
c5f0: 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ared.** database
c600: 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74   schema are init
c610: 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ially stored in 
c620: 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f  a linked-list po
c630: 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74  inted to by.** t
c640: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
c650: 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65   member variable
c660: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
c670: 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65  nding Table obje
c680: 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73  ct..** When an s
c690: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
c6a0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65   operation is re
c6b0: 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73  quired to access
c6c0: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
c6d0: 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68  table, it search
c6e0: 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20  es the list for 
c6f0: 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20  the VTable that 
c700: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
c710: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  he.** database c
c720: 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20  onnection doing 
c730: 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f  the preparing so
c740: 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63   as to use the c
c750: 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65  orrect.** sqlite
c760: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69  3_vtab* handle i
c770: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  n the compiled q
c780: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  uery..**.** When
c790: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61   an in-memory Ta
c7a0: 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65  ble object is de
c7b0: 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70  leted (for examp
c7c0: 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73  le when the.** s
c7d0: 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72  chema is being r
c7e0: 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65  eloaded for some
c7f0: 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54   reason), the VT
c800: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65  able objects are
c810: 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64   not .** deleted
c820: 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
c830: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
c840: 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
c850: 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64  ct()ed .** immed
c860: 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
c870: 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
c880: 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
c890: 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
c8a0: 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
c8b0: 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
c8c0: 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
c8d0: 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
c8e0: 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
c8f0: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
c900: 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
c910: 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
c920: 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a  xDisconnected .*
c930: 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
c940: 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
c950: 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
c960: 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
c970: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
c980: 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
c990: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
c9a0: 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
c9b0: 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
c9c0: 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
c9d0: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
c9e0: 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
c9f0: 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
ca00: 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
ca10: 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
ca20: 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
ca30: 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
ca40: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
ca50: 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
ca60: 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
ca70: 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
ca80: 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
ca90: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
caa0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
cab0: 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
cac0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a  allocated by .**
cad0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
cae0: 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f  (), using the co
caf0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
cb00: 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65  stored in VTable
cb10: 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66  .db as .** the f
cb20: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
cb30: 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
cb40: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cb60: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
cb70: 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
cb80: 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
cb90: 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
cba0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
cbb0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
cbc0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
cbd0: 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
cbe0: 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
cbf0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
cc00: 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
cc10: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc30: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
cc40: 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
cc50: 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
cc60: 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
cc70: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
cc80: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
cc90: 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
cca0: 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
ccb0: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
ccc0: 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
ccd0: 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
cce0: 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
ccf0: 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
cd00: 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
cd10: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
cd20: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
cd30: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
cd40: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
cd50: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
cd60: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
cd70: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
cd80: 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69  ** Table.zName i
cd90: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
cda0: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61  e table.  The ca
cdb0: 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  se of the origin
cdc0: 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42  al.** CREATE TAB
cdd0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
cde0: 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65  stored, but case
cdf0: 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63   is not signific
ce00: 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61  ant for.** compa
ce10: 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61  risons..**.** Ta
ce20: 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20  ble.nCol is the 
ce30: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
ce40: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s in this table.
ce50: 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20    Table.aCol is 
ce60: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
ce70: 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75  an array of Colu
ce80: 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f  mn structures, o
ce90: 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
cea0: 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  mn..**.** If the
ceb0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e   table has an IN
cec0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
ced0: 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50  Y, then Table.iP
cee0: 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78  Key is the index
cef0: 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d   of.** the colum
cf00: 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b  n that is that k
cf10: 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20  ey.   Otherwise 
cf20: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e  Table.iPKey is n
cf30: 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a  egative.  Note.*
cf40: 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74  * that the datat
cf50: 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41  ype of the PRIMA
cf60: 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49  RY KEY must be I
cf70: 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20  NTEGER for this 
cf80: 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73  field to.** be s
cf90: 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  et.  An INTEGER 
cfa0: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75  PRIMARY KEY is u
cfb0: 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64  sed as the rowid
cfc0: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
cfd0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20  .** the table.  
cfe0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e  If a table has n
cff0: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
d000: 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61  Y KEY, then a ra
d010: 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73  ndom rowid.** is
d020: 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65   generated for e
d030: 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74  ach row of the t
d040: 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69  able.  TF_HasPri
d050: 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69  maryKey is set i
d060: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68  f.** the table h
d070: 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b  as any PRIMARY K
d080: 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f  EY, INTEGER or o
d090: 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20  therwise..**.** 
d0a0: 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68  Table.tnum is th
d0b0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  e page number fo
d0c0: 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65  r the root BTree
d0d0: 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62   page of the tab
d0e0: 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74  le in the.** dat
d0f0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20  abase file.  If 
d100: 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65  Table.iDb is the
d110: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
d120: 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63  tabase table bac
d130: 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74  kend.** in sqlit
d140: 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66  e.aDb[].  0 is f
d150: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
d160: 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f  base and 1 is fo
d170: 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a  r the file that.
d180: 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61  ** holds tempora
d190: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
d1a0: 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70  dices.  If TF_Ep
d1b0: 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a  hemeral is set.*
d1c0: 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  * then the table
d1d0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
d1e0: 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74  file that is aut
d1f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
d200: 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56  ed.** when the V
d210: 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68  DBE cursor to th
d220: 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  e table is close
d230: 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
d240: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20   Table.tnum .** 
d250: 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73  refers VDBE curs
d260: 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68  or number that h
d270: 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f  olds the table o
d280: 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20  pen, not to the 
d290: 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d  root.** page num
d2a0: 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20  ber.  Transient 
d2b0: 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20  tables are used 
d2c0: 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75  to hold the resu
d2d0: 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d  lts of a.** sub-
d2e0: 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61  query that appea
d2f0: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  rs instead of a 
d300: 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20  real table name 
d310: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
d320: 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45  se .** of a SELE
d330: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  CT statement..*/
d340: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
d350: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
d360: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
d370: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
d380: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
d390: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
d3a0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
d3b0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
d3c0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
d3d0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
d3e0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
d3f0: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
d400: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
d410: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
d420: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
d430: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
d440: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
d450: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
d460: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
d470: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
d480: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
d490: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
d4a0: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
d4b0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
d4c0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
d4d0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
d4e0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
d4f0: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
d500: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
d510: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
d520: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
d530: 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63  /.#endif.  tRowc
d540: 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20  nt nRowEst;     
d550: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
d560: 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
d570: 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
d580: 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  able */.  int tn
d590: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
d5a0: 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64  * Root BTree nod
d5b0: 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
d5c0: 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65   (see note above
d5d0: 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  ) */.  i16 iPKey
d5e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
d5f0: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
d600: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
d610: 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  as the primary k
d620: 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  ey */.  i16 nCol
d630: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d640: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
d650: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
d660: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
d670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d680: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
d690: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
d6a0: 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
d6b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
d6c0: 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
d6d0: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
d6e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
d6f0: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
d700: 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
d710: 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
d720: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d730: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
d740: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
d750: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
d760: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
d770: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
d780: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
d790: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
d7a0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
d7b0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
d7c0: 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
d7d0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d7e0: 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
d7f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
d800: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54  ModuleArg;  /* T
d810: 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c  ext of all modul
d820: 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d  e args. [0] is m
d830: 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  odule name */.  
d840: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
d850: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
d860: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
d870: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
d880: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
d890: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
d8a0: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
d8b0: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
d8c0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
d8d0: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
d8e0: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
d8f0: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
d900: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
d910: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
d920: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
d930: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
d940: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
d950: 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73  or Tabe.tabFlags
d960: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
d970: 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
d980: 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
d990: 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
d9a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
d9b0: 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
d9c0: 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
d9d0: 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
d9e0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
d9f0: 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
da00: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
da10: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
da20: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
da30: 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
da40: 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
da50: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
da60: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
da70: 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
da80: 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
da90: 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
daa0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a  al table */.../*
dab0: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
dac0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
dad0: 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
dae0: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
daf0: 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
db00: 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
db10: 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
db20: 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
db30: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
db40: 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
db50: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
db60: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
db70: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
db80: 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
db90: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
dba0: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
dbb0: 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
dbc0: 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
dbd0: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
dbe0: 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
dbf0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
dc00: 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
dc10: 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
dc20: 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
dc30: 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
dc40: 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
dc50: 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
dc60: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
dc70: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
dc80: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
dc90: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
dca0: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
dcb0: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
dcc0: 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
dcd0: 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
dce0: 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
dcf0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
dd00: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
dd10: 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
dd20: 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
dd30: 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
dd40: 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
dd50: 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
dd60: 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
dd70: 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
dd80: 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
dd90: 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
dda0: 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
ddb0: 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
ddc0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
ddd0: 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
dde0: 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
ddf0: 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
de00: 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
de10: 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
de20: 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
de30: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
de40: 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
de50: 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
de60: 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
de70: 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
de80: 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
de90: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
dea0: 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
deb0: 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
dec0: 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
ded0: 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
dee0: 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
def0: 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
df00: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
df10: 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
df20: 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
df30: 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
df40: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b  ed..*/.struct FK
df50: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
df60: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
df70: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
df80: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
df90: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
dfa0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
dfb0: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66  From;  /* Next f
dfc0: 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46  oreign key in pF
dfd0: 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
dfe0: 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
dff0: 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
e000: 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
e010: 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
e020: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
e030: 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
e040: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
e050: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
e060: 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
e070: 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
e080: 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  s foreign key on
e090: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
e0a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
e0b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e0c0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
e0d0: 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
e0e0: 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
e0f0: 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
e100: 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75  erred;    /* Tru
e110: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
e120: 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
e130: 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
e140: 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
e150: 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [2];          /*
e160: 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
e170: 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
e180: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
e190: 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
e1a0: 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54  rigger[2];  /* T
e1b0: 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
e1c0: 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
e1d0: 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
e1e0: 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20  p {  /* Mapping 
e1f0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
e200: 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
e210: 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
e220: 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
e230: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
e240: 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
e250: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
e260: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
e270: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
e280: 20 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52   If 0 use PRIMAR
e290: 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
e2a0: 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  l[1];        /* 
e2b0: 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
e2c0: 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
e2d0: 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  n s */.};../*.**
e2e0: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
e2f0: 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
e300: 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
e310: 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
e320: 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
e330: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e340: 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
e350: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
e360: 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
e370: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
e380: 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
e390: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
e3a0: 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
e3b0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
e3c0: 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
e3d0: 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
e3e0: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
e3f0: 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
e400: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
e410: 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
e420: 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
e430: 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
e440: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
e450: 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
e460: 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
e470: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
e480: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
e490: 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
e4a0: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
e4b0: 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
e4c0: 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
e4d0: 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
e4e0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
e4f0: 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
e500: 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
e510: 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
e520: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
e530: 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
e540: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
e550: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
e560: 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
e570: 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
e580: 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
e590: 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
e5a0: 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
e5b0: 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
e5c0: 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
e5d0: 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
e5e0: 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
e5f0: 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
e600: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
e610: 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
e620: 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
e630: 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
e640: 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
e650: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
e660: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
e670: 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
e680: 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
e690: 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
e6a0: 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
e6b0: 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
e6c0: 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
e6d0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
e6e0: 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
e6f0: 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
e700: 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
e710: 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
e720: 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
e730: 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
e740: 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
e750: 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
e760: 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
e770: 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
e780: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
e790: 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
e7a0: 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
e7b0: 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
e7c0: 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
e7d0: 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
e7e0: 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
e7f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
e800: 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
e810: 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
e820: 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
e830: 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
e840: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
e850: 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
e860: 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
e870: 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
e880: 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
e890: 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
e8a0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
e8b0: 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
e8c0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e8d0: 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
e8e0: 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
e8f0: 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
e900: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
e910: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e920: 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
e930: 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
e940: 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
e950: 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
e960: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
e970: 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
e980: 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
e990: 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
e9a0: 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
e9b0: 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
e9c0: 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
e9d0: 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
e9e0: 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
e9f0: 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
ea00: 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
ea10: 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
ea20: 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
ea30: 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
ea40: 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
ea50: 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
ea60: 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
ea70: 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
ea80: 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
ea90: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
eaa0: 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
eab0: 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
eac0: 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
ead0: 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
eae0: 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
eaf0: 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
eb00: 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
eb10: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
eb20: 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77  ult  99  /* Do w
eb30: 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
eb40: 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
eb50: 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
eb60: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
eb70: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
eb80: 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
eb90: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
eba0: 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
ebb0: 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
ebc0: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
ebd0: 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
ebe0: 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
ebf0: 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
ec00: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
ec10: 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
ec20: 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
ec30: 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
ec40: 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
ec50: 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
ec60: 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
ec70: 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
ec80: 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
ec90: 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
eca0: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
ecb0: 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33  Info {.  sqlite3
ecc0: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
ecd0: 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
ece0: 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
ecf0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
ed00: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
ed10: 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
ed20: 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
ed30: 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
ed40: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  d;         /* Ma
ed50: 78 69 6d 75 6d 20 69 6e 64 65 78 20 66 6f 72 20  ximum index for 
ed60: 61 43 6f 6c 6c 5b 5d 20 61 6e 64 20 61 53 6f 72  aColl[] and aSor
ed70: 74 4f 72 64 65 72 5b 5d 20 2a 2f 0a 20 20 75 38  tOrder[] */.  u8
ed80: 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
ed90: 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
eda0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
edb0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61   */.  CollSeq *a
edc0: 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c  Coll[1];  /* Col
edd0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ede0: 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66  for each term of
edf0: 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a   the key */.};..
ee00: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
ee10: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
ee20: 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
ee30: 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
ee40: 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65  bout a.** single
ee50: 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68   index record th
ee60: 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  at has already b
ee70: 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
ee80: 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
ee90: 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
eea0: 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f  A record is an o
eeb0: 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61  bject that conta
eec0: 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
eed0: 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a  fields of data..
eee0: 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75  ** Records are u
eef0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
ef00: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
ef10: 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73  ble row and to s
ef20: 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20  tore.** the key 
ef30: 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20  of an index.  A 
ef40: 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66  blob encoding of
ef50: 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65   a record is cre
ef60: 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f  ated by.** the O
ef70: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  P_MakeRecord opc
ef80: 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20  ode of the VDBE 
ef90: 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62  and is disassemb
efa0: 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50  led by the.** OP
efb0: 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
efc0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
efd0: 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63  ture holds a rec
efe0: 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72  ord that has alr
eff0: 65 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73  eady been disass
f000: 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69  embled.** into i
f010: 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66  ts constituent f
f020: 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  ields..*/.struct
f030: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
f040: 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
f050: 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
f060: 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
f070: 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
f080: 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
f090: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f0a0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
f0b0: 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38   apMem[] */.  u8
f0c0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
f0d0: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74    /* Boolean set
f0e0: 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b 45 44  tings.  UNPACKED
f0f0: 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  _... below */.  
f100: 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20  i64 rowid;      
f110: 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 55      /* Used by U
f120: 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
f130: 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a  EARCH */.  Mem *
f140: 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
f150: 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  * Values */.};..
f160: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
f170: 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64  lues of Unpacked
f180: 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a  Record.flags.*/.
f190: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
f1a0: 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30  _INCRKEY       0
f1b0: 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69  x01  /* Make thi
f1c0: 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e  s key an epsilon
f1d0: 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69   larger */.#defi
f1e0: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
f1f0: 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32 20 20  IX_MATCH  0x02  
f200: 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74 63  /* A prefix matc
f210: 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  h is considered 
f220: 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  OK */.#define UN
f230: 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
f240: 41 52 43 48 20 30 78 30 34 20 20 2f 2a 20 49 67  ARCH 0x04  /* Ig
f250: 6e 6f 72 65 20 66 69 6e 61 6c 20 28 72 6f 77 69  nore final (rowi
f260: 64 29 20 66 69 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a  d) field */../*.
f270: 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
f280: 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
f290: 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
f2a0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f2b0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f2c0: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
f2d0: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
f2e0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
f2f0: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
f300: 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
f310: 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
f320: 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
f330: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
f340: 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
f350: 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
f360: 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
f370: 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
f380: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
f390: 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
f3a0: 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
f3b0: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
f3c0: 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
f3d0: 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
f3e0: 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
f3f0: 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
f400: 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
f410: 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
f420: 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
f430: 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
f440: 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
f450: 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
f460: 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
f470: 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
f480: 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
f490: 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
f4a0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
f4b0: 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
f4c0: 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
f4d0: 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20  ==2 because the 
f4e0: 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
f4f0: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
f500: 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
f510: 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
f520: 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
f530: 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
f540: 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
f550: 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
f560: 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
f570: 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
f580: 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
f590: 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
f5a0: 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
f5b0: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
f5c0: 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
f5d0: 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
f5e0: 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
f5f0: 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
f600: 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
f610: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
f620: 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
f630: 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
f640: 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
f650: 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
f660: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
f670: 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
f680: 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
f690: 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
f6a0: 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
f6b0: 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72  lution .** algor
f6c0: 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
f6d0: 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
f6e0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
f6f0: 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
f700: 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  e.** element..*/
f710: 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
f720: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f730: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
f740: 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
f750: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c   */.  int *aiCol
f760: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
f770: 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
f780: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
f790: 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
f7a0: 30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  0 */.  tRowcnt *
f7b0: 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
f7c0: 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
f7d0: 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
f7e0: 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
f7f0: 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
f800: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
f810: 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
f820: 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
f830: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
f840: 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
f850: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
f860: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
f870: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f880: 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
f890: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
f8a0: 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
f8b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
f8c0: 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
f8d0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
f8e0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
f8f0: 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
f900: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f910: 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
f920: 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
f930: 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
f940: 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
f950: 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
f960: 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
f970: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
f980: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
f990: 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
f9a0: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
f9b0: 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
f9c0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
f9d0: 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
f9e0: 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa00: 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
fa10: 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
fa20: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  is index */.  u1
fa30: 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
fa40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
fa50: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
fa60: 61 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 69  able used by thi
fa70: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  s index */.  u8 
fa80: 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
fa90: 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
faa0: 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
fab0: 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
fac0: 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
fad0: 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32 3b 20  ed autoIndex:2; 
fae0: 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
faf0: 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
fb00: 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
fb10: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
fb20: 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
fb30: 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
fb40: 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
fb50: 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
fb60: 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
fb70: 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
fb80: 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
fb90: 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
fba0: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66 64 65  columns */.#ifde
fbb0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
fbc0: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
fbd0: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
fbe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
fbf0: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
fc00: 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
fc10: 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
fc20: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
fc30: 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
fc40: 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
fc50: 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
fc60: 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
fc70: 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
fc80: 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
fc90: 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
fca0: 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
fcb0: 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
fcc0: 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
fcd0: 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
fce0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
fcf0: 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
fd00: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
fd10: 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
fd20: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
fd30: 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67  memory .** using
fd40: 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
fd50: 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
fd60: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
fd70: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
fd80: 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
fd90: 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
fda0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fdb0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
fdc0: 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
fdd0: 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
fde0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
fdf0: 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
fe00: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
fe10: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
fe20: 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
fe30: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
fe40: 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
fe50: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
fe60: 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
fe70: 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
fe80: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
fe90: 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
fea0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
feb0: 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
fec0: 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
fed0: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
fee0: 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
fef0: 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
ff00: 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
ff10: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
ff20: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
ff30: 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
ff40: 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
ff50: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
ff60: 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
ff70: 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
ff80: 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
ff90: 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
ffa0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
ffb0: 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
ffc0: 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
ffd0: 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
ffe0: 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
fff0: 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
10000 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
10010 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
10020 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
10030 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
10040 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
10050 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
10060 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
10070 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
10080 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
10090 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
100a0 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
100b0 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
100c0 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
100d0 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
100e0 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
100f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
10100 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
10110 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
10120 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
10130 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
10140 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
10150 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
10160 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
10170 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
10180 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
10190 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
101a0 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
101b0 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
101c0 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
101d0 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
101e0 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
101f0 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
10200 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
10210 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
10220 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
10230 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
10240 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
10250 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
10260 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
10270 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
10280 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
10290 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
102a0 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
102b0 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
102c0 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
102d0 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
102e0 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
102f0 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
10300 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
10310 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
10320 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
10330 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
10340 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
10350 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
10360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
10370 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
10380 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
10390 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
103c0 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
103d0 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
103e0 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
103f0 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
10400 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
10410 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
10420 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
10430 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
10460 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10470 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
10480 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
10490 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
104a0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
104b0 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
104c0 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
104d0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
104e0 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
104f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
10500 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
10510 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
10520 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
10530 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  g index */.  Exp
10540 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
10550 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
10560 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
10570 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
10580 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
10590 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
105a0 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
105b0 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
105c0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
105d0 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
105e0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
105f0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
10600 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
10610 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
10620 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
10630 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
10640 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
10650 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
10660 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10670 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
10680 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
10690 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
106a0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
106b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
106c0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
106d0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
106e0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
106f0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
10700 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
10710 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
10720 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
10730 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
10740 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
10750 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
10760 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10770 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
10780 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
10790 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
107a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
107b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
107c0 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
107d0 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
10800 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
10810 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
10820 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
10850 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
10860 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
10870 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
10880 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
10890 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
108a0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
108b0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
108c0 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
108d0 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
108e0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
108f0 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
10900 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
10910 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
10920 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
10930 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
10940 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
10950 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
10960 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
10970 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
10980 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
10990 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
109a0 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
109b0 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
109c0 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
109d0 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
109e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
109f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
10a00 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
10a10 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
10a20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
10a30 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
10a40 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
10a50 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
10a60 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
10a70 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
10a80 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
10a90 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
10aa0 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
10ab0 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
10ac0 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
10ad0 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
10ae0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
10af0 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
10b00 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
10b10 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
10b20 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
10b30 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
10b40 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
10b50 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
10b60 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
10b70 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
10b80 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
10b90 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
10ba0 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
10bb0 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
10bc0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
10bd0 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
10be0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
10bf0 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
10c00 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
10c10 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
10c20 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
10c30 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
10c40 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
10c50 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
10c60 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
10c70 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
10c80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
10c90 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
10ca0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
10cb0 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
10cc0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
10cd0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
10ce0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
10cf0 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
10d00 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
10d10 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
10d20 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
10d30 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
10d40 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
10d50 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
10d60 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
10d70 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
10d80 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
10d90 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
10da0 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
10db0 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
10dc0 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
10dd0 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
10de0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
10df0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
10e00 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
10e10 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
10e20 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
10e30 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
10e40 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
10e50 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b  _BLOB, .** or TK
10e60 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45  _STRING), then E
10e70 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
10e80 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74  ns the text of t
10e90 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20  he SQL literal. 
10ea0 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  If.** the expres
10eb0 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62  sion is a variab
10ec0 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29  le (TK_VARIABLE)
10ed0 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
10ee0 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a  n contains the .
10ef0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
10f00 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
10f10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10f20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
10f30 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
10f40 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
10f50 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
10f60 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
10f70 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
10f80 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
10f90 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
10fa0 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
10fb0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
10fc0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
10fd0 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
10fe0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
10ff0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
11000 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
11010 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
11020 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
11030 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
11040 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
11050 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
11060 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
11070 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
11080 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
11090 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
110a0 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
110b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
110c0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
110d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
110e0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
110f0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
11100 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
11110 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
11120 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
11130 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
11140 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
11150 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
11160 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
11170 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69  List is .** vali
11180 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72  d..**.** An expr
11190 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
111a0 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72  rm ID or ID.ID r
111b0 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d  efers to a colum
111c0 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  n in a table..**
111d0 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73   For such expres
111e0 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69  sions, Expr.op i
111f0 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55  s set to TK_COLU
11200 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62  MN and Expr.iTab
11210 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74  le is.** the int
11220 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62  eger cursor numb
11230 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72  er of a VDBE cur
11240 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
11250 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a  that table and.*
11260 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69  * Expr.iColumn i
11270 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  s the column num
11280 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63  ber for the spec
11290 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  ific column.  If
112a0 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69   the.** expressi
112b0 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20  on is used as a 
112c0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67  result in an agg
112d0 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74  regate SELECT, t
112e0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
112f0 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20   is also stored 
11300 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67  in the Expr.iAgg
11310 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61   column in the a
11320 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74  ggregate so that
11330 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63  .** it can be ac
11340 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c  cessed after all
11350 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20   aggregates are 
11360 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  computed..**.** 
11370 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
11380 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20  n is an unbound 
11390 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20  variable marker 
113a0 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (a question mark
113b0 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27   .** character '
113c0 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
113d0 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
113e0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
113f0 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  ds the index .**
11400 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
11410 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   variable..**.**
11420 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
11430 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79  on is a subquery
11440 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75   then Expr.iColu
11450 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  mn holds an inte
11460 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ger.** register 
11470 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e  number containin
11480 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  g the result of 
11490 74 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49  the subquery.  I
114a0 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72  f the.** subquer
114b0 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61  y gives a consta
114c0 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20  nt result, then 
114d0 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49  iTable is -1.  I
114e0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a  f the subquery.*
114f0 2a 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72  * gives a differ
11500 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69  ent answer at di
11510 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75  fferent times du
11520 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70  ring statement p
11530 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65  rocessing.** the
11540 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20  n iTable is the 
11550 61 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62  address of a sub
11560 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d  routine that com
11570 70 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65  putes the subque
11580 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ry..**.** If the
11590 20 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65   Expr is of type
115a0 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20   OP_Column, and 
115b0 74 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20  the table it is 
115c0 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a  selecting from.*
115d0 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c  * is a disk tabl
115e0 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22  e or the "old.*"
115f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74   pseudo-table, t
11600 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20  hen pTab points 
11610 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  to the.** corres
11620 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65  ponding table de
11630 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  finition..**.** 
11640 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53  ALLOCATION NOTES
11650 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a  :.**.** Expr obj
11660 65 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c  ects can use a l
11670 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  ot of memory spa
11680 63 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73  ce in database s
11690 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65  chema.  To.** he
116a0 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79  lp reduce memory
116b0 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73   requirements, s
116c0 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72  ometimes an Expr
116d0 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a   object will be.
116e0 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41  ** truncated.  A
116f0 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65  nd to reduce the
11700 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
11710 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73  y allocations, s
11720 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20  ometimes.** two 
11730 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a  or more Expr obj
11740 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f  ects will be sto
11750 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  red in a single 
11760 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11770 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77  n,.** together w
11780 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  ith Expr.zToken 
11790 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49  strings..**.** I
117a0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
117b0 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   and EP_TokenOnl
117c0 79 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  y flags are set 
117d0 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20  when.** an Expr 
117e0 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61  object is trunca
117f0 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65  ted.  When EP_Re
11800 64 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68  duced is set, th
11810 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68  en all.** the ch
11820 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ild Expr objects
11830 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65   in the Expr.pLe
11840 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67  ft and Expr.pRig
11850 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61  ht subtrees.** a
11860 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  re contained wit
11870 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  hin the same mem
11880 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ory allocation. 
11890 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20   Note, however, 
118a0 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74  that.** the subt
118b0 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70  rees in Expr.x.p
118c0 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70  List or Expr.x.p
118d0 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  Select are alway
118e0 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20  s separately.** 
118f0 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72  allocated, regar
11900 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
11910 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63   or not EP_Reduc
11920 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74  ed is set..*/.st
11930 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38  ruct Expr {.  u8
11940 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
11950 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f       /* Operatio
11960 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74  n performed by t
11970 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68  his node */.  ch
11980 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
11990 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
119a0 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
119b0 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61  mn or 0 if not a
119c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32   column */.  u32
119d0 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
119e0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
119f0 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20  lags.  EP_* See 
11a00 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e  below */.  union
11a10 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f   {.    char *zTo
11a20 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ken;          /*
11a30 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65   Token value. Ze
11a40 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e  ro terminated an
11a50 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20  d dequoted */.  
11a60 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20    int iValue;   
11a70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d           /* Non-
11a80 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72  negative integer
11a90 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74   value if EP_Int
11aa0 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  Value */.  } u;.
11ab0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
11ac0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69  TokenOnly flag i
11ad0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
11ae0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11af0 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11b00 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11b10 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11b20 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11b30 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11b40 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11b50 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11b60 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11b70 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a  nction. .  *****
11b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11bc0 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74  /..  Expr *pLeft
11bd0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
11be0 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  eft subnode */. 
11bf0 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20   Expr *pRight;  
11c00 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74          /* Right
11c10 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e   subnode */.  un
11c20 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69  ion {.    ExprLi
11c30 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f  st *pList;     /
11c40 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  * op = IN, EXIST
11c50 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c  S, SELECT, CASE,
11c60 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45   FUNCTION, BETWE
11c70 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  EN */.    Select
11c80 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
11c90 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61  * EP_xIsSelect a
11ca0 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  nd op = IN, EXIS
11cb0 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20  TS, SELECT */.  
11cc0 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } x;..  /* If th
11cd0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
11ce0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
11cf0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
11d00 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
11d10 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
11d20 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
11d30 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
11d40 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
11d50 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
11d60 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
11d70 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
11d80 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
11d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11dd0 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  **/..#if SQLITE_
11de0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
11df0 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
11e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69            /* Hei
11e10 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20  ght of the tree 
11e20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e  headed by this n
11e30 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
11e40 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
11e50 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
11e60 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
11e70 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
11e80 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
11eb0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
11ec0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11ee0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
11ef0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a   new, 0 -> old *
11f00 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
11f10 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
11f20 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
11f30 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
11f40 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11f60 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
11f70 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
11f80 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
11f90 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
11fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11fb0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
11fc0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
11fd0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
11fe0 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
11ff0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
12000 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
12010 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
12020 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
12030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12040 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
12050 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
12060 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
12090 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
120a0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
120d0 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
120e0 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
120f0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
12100 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
12110 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
12120 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
12130 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
12140 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
12150 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
12160 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
12170 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
12180 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
12190 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
121a0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
121b0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
121c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
121d0 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
121e0 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20  1 /* Originated 
121f0 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  in ON or USING c
12200 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
12210 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
12220 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
12230 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
12240 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
12250 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
12260 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
12270 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a  ved  0x000004 /*
12280 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
12290 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
122a0 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
122b0 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30  _Error     0x000
122c0 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  008 /* Expressio
122d0 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
122e0 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
122f0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
12300 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f  inct  0x000010 /
12310 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
12320 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
12330 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
12340 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
12350 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70  ct 0x000020 /* p
12360 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
12370 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
12380 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
12390 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30  _DblQuoted 0x000
123a0 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  040 /* token.z w
123b0 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
123c0 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
123d0 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30  e EP_InfixFunc 0
123e0 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20  x000080 /* True 
123f0 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
12400 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
12410 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
12420 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30  e EP_Collate   0
12430 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20  x000100 /* Tree 
12440 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
12450 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a  LLATE opeartor *
12460 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
12470 65 64 44 65 73 74 20 30 78 30 30 30 32 30 30 20  edDest 0x000200 
12480 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64  /* Result needed
12490 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20 72   in a specific r
124a0 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69  egister */.#defi
124b0 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
124c0 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
124d0 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
124e0 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
124f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
12500 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
12510 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
12520 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
12530 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
12540 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e 74  .#define EP_Hint
12550 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
12560 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  * Not used */.#d
12570 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
12580 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
12590 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
125a0 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
125b0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
125c0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
125d0 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
125e0 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
125f0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
12600 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
12610 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
12620 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
12630 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
12640 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
12650 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
12660 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
12670 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
12680 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12690 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
126a0 65 66 69 6e 65 20 45 50 5f 49 72 72 65 64 75 63  efine EP_Irreduc
126b0 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
126c0 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
126d0 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
126e0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65  /../*.** The pse
126f0 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69  udo-routine sqli
12700 74 65 33 45 78 70 72 53 65 74 49 72 72 65 64 75  te3ExprSetIrredu
12710 63 69 62 6c 65 20 73 65 74 73 20 74 68 65 20 45  cible sets the E
12720 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a  P2_Irreducible.*
12730 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70  * flag on an exp
12740 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72  ression structur
12750 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69 73  e.  This flag is
12760 20 75 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f   used for VV&A o
12770 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75  nly.  The.** rou
12780 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tine is implemen
12790 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74  ted as a macro t
127a0 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77  hat only works w
127b0 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67  hen in debugging
127c0 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20   mode,.** so as 
127d0 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72  not to burden pr
127e0 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a  oduction code..*
127f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
12800 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
12810 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12820 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73  e(X)  (X)->flags
12830 20 7c 3d 20 45 50 5f 49 72 72 65 64 75 63 65 0a   |= EP_Irreduce.
12840 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
12850 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12860 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e(X).#endif../*.
12870 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
12880 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
12890 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
128a0 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
128b0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
128c0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
128d0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
128e0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
128f0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
12900 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
12910 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
12920 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
12930 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
12940 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
12950 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
12960 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
12970 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
12980 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
12990 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
129a0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
129b0 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
129c0 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
129d0 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
129e0 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20  xpr .** struct, 
129f0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
12a00 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
12a10 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
12a20 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e  xpr.flags .** an
12a30 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
12a40 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
12a50 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
12a60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
12a70 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
12a80 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
12a90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
12aa0 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
12ab0 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
12ac0 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
12ad0 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
12ae0 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
12af0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
12b00 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
12b10 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
12b20 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
12b30 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
12b40 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
12b50 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
12b60 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
12b70 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
12b80 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
12b90 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74   .** above sqlit
12ba0 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
12bb0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
12bc0 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
12bd0 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
12be0 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
12bf0 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
12c00 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
12c10 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
12c20 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
12c30 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
12c40 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
12c50 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
12c60 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
12c70 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
12c80 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
12c90 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
12ca0 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
12cb0 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
12cc0 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
12cd0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
12ce0 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
12cf0 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
12d00 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
12d10 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
12d20 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
12d30 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
12d40 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
12d50 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
12d60 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
12d70 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
12d80 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
12d90 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
12da0 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
12db0 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
12dc0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
12dd0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
12de0 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
12df0 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
12e00 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
12e10 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
12e20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
12e30 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
12e40 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
12e50 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
12e60 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
12e70 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
12e80 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
12e90 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
12ea0 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
12eb0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
12ec0 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
12ed0 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
12ee0 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
12ef0 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
12f00 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
12f10 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
12f20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
12f30 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
12f40 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
12f50 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
12f60 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
12f70 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
12f80 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
12f90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12fa0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
12fb0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
12fc0 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20   int iECursor;  
12fd0 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20          /* VDBE 
12fe0 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65  Cursor associate
12ff0 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70 72  d with this Expr
13000 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  List */.  struct
13010 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
13020 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
13030 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
13040 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
13050 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13060 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
13070 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
13080 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
13090 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
130a0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
130b0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
130c0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
130d0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
130e0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
130f0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
13100 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
13110 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
13120 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
13130 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
13140 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
13150 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
13160 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
13170 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
13180 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
13190 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
131a0 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
131b0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
131c0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
131d0 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72 64   */.    u16 iOrd
131e0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  erByCol;        
131f0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
13200 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
13210 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
13220 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
13230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
13240 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
13250 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
13260 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20  me */.  } *a;   
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13280 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
13290 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
132a0 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
132b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
132c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
132d0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
132e0 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
132f0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
13300 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
13310 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
13320 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
13330 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
13340 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
13350 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
13360 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
13370 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
13380 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
13390 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
133a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
133b0 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
133c0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
133d0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
133e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
133f0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
13400 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
13410 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
13420 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
13430 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
13440 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
13450 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
13460 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
13470 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
13480 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
13490 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
134a0 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
134b0 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
134c0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
134d0 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
134e0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
134f0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
13500 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
13510 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
13520 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
13530 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
13540 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
13550 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
13560 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
13570 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
13580 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
13590 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
135a0 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
135b0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
135c0 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
135d0 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
135e0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
135f0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
13600 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
13610 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
13620 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
13630 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
13640 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
13650 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
13660 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
13670 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
13680 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
13690 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
136a0 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
136b0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
136c0 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
136d0 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
136e0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
136f0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
13700 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13710 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
13720 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
13730 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
13740 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
13750 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
13760 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
13770 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
13780 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
13790 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
137a0 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
137b0 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
137c0 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
137d0 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
137e0 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
137f0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
13800 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
13810 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
13820 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
13830 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
13840 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
13850 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
13860 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
13870 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
13880 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
13890 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
138a0 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
138b0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
138c0 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
138d0 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
138e0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
138f0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
13900 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
13910 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13920 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
13930 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
13940 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
13950 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
13960 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
13970 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
13980 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
13990 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
139a0 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
139b0 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
139c0 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
139d0 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
139e0 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
139f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
13a00 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
13a10 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
13a20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
13a30 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
13a40 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
13a50 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
13a60 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
13a70 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
13a80 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
13a90 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
13aa0 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
13ab0 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
13ac0 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
13ad0 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
13ae0 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
13af0 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
13b00 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
13b10 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
13b20 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
13b30 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
13b40 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
13b50 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
13b60 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
13b70 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
13b80 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
13b90 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
13ba0 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
13bb0 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
13bc0 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
13bd0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
13be0 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
13bf0 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
13c00 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
13c10 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
13c20 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
13c30 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
13c40 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
13c50 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
13c60 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
13c70 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
13c80 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
13c90 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
13ca0 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
13cb0 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
13cc0 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
13cd0 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
13ce0 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
13cf0 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
13d00 20 20 75 38 20 6e 53 72 63 3b 20 20 20 20 20 20    u8 nSrc;      
13d10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
13d20 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
13d30 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ies in the FROM 
13d40 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 6e  clause */.  u8 n
13d50 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
13d60 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
13d70 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
13d80 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
13d90 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
13da0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
13db0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
13dc0 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
13dd0 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
13de0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
13df0 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
13e00 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
13e10 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
13e20 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
13e30 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13e40 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
13e50 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
13e60 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
13e70 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
13e80 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
13e90 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
13ea0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13eb0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
13ec0 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
13ed0 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
13ee0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
13ef0 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
13f00 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
13f10 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
13f20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
13f30 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
13f40 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
13f50 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
13f60 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
13f70 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
13f80 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
13f90 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
13fa0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
13fb0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
13fc0 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
13fd0 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
13fe0 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
13ff0 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
14000 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
14010 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
14020 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
14030 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
14040 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
14050 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
14060 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
14070 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
14080 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
14090 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
140a0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
140b0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
140c0 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
140d0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23   co-routine */.#
140e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
140f0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
14100 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
14110 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
14120 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
14130 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
14140 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
14150 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
14160 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14170 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
14180 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
14190 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
141a0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
141b0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
141c0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
141d0 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
141e0 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
141f0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
14200 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
14210 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
14220 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
14230 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
14240 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
14250 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20    char *zIndex; 
14260 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
14270 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
14280 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
14290 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78  use */.    Index
142a0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20   *pIndex;    /* 
142b0 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
142c0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
142d0 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20   zIndex, if any 
142e0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
142f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
14300 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
14310 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
14320 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
14330 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
14340 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
14350 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
14360 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
14370 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
14380 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
14390 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
143a0 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
143b0 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
143c0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
143d0 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
143e0 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
143f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
14400 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
14410 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
14420 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
14430 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
14440 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
14450 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
14460 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14470 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
14480 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
14490 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
144a0 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
144b0 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
144c0 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
144d0 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
144e0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
144f0 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
14500 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
14510 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
14520 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46  ype */.../*.** F
14530 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
14540 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
14550 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
14560 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
14570 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
14580 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
14590 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
145a0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
145b0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
145c0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
145d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
145e0 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
145f0 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
14600 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
14610 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
14620 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
14630 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
14640 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
14650 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
14660 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
14670 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
14680 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
14690 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
146a0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
146b0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
146c0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
146d0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
146e0 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
146f0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
14700 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
14710 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
14720 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
14730 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
14740 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
14750 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
14760 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
14770 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
14780 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
14790 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
147a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
147b0 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
147c0 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
147d0 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
147e0 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
147f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14800 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20  _AND_ONLY       
14810 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27    0x0080 /* Don'
14820 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f  t use indices fo
14830 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64  r OR terms */.#d
14840 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
14850 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
14860 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
14870 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
14880 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
14890 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
148a0 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
148b0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
148c0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
148d0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
148e0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
148f0 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
14900 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
14910 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
14920 74 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  t */../* Allowed
14930 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
14940 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
14950 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
14960 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
14970 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
14980 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
14990 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
149a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
149b0 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
149c0 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
149d0 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
149e0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
149f0 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
14a00 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
14a10 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
14a20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14a30 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
14a40 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
14a50 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
14a60 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
14a70 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
14a80 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
14a90 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
14aa0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
14ab0 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
14ac0 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
14ad0 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
14ae0 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
14af0 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
14b00 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
14b10 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
14b20 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
14b30 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
14b40 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
14b50 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
14b60 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
14b70 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
14b80 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
14b90 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
14ba0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
14bb0 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
14bc0 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
14bd0 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
14be0 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
14bf0 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
14c00 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
14c10 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
14c20 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
14c30 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
14c40 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
14c50 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
14c60 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
14c70 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
14c80 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
14c90 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
14ca0 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
14cb0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
14cc0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
14cd0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
14ce0 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
14cf0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
14d00 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
14d10 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
14d20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
14d30 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
14d40 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
14d50 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
14d60 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
14d70 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
14d80 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
14d90 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
14da0 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
14db0 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
14dc0 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
14dd0 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
14de0 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
14df0 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
14e00 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
14e10 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
14e20 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
14e30 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
14e40 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
14e50 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
14e60 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
14e70 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
14e80 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
14e90 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
14ea0 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
14eb0 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
14ec0 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
14ed0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
14ee0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
14ef0 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
14f00 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
14f10 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
14f20 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
14f30 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
14f40 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
14f50 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
14f60 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
14f70 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
14f80 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
14f90 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
14fa0 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
14fb0 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
14fc0 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
14fd0 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
14fe0 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
14ff0 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
15000 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
15010 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
15020 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15030 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
15040 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
15050 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
15060 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
15070 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
15080 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
15090 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
150a0 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c  mes */.  u8 ncFl
150b0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
150c0 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
150d0 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
150e0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
150f0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
15100 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
15110 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
15120 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
15130 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
15140 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65 67  x01    /* Aggreg
15150 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
15160 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
15170 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
15180 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20 2f  Agg    0x02    /
15190 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
151a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
151b0 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
151c0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
151d0 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x04    /* True i
151e0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
151f0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
15200 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
15210 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
15220 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65 20  0x08    /* True 
15230 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
15240 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
15250 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
15260 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
15270 31 30 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  10    /* True if
15280 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
15290 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
152a0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
152b0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
152c0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
152d0 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
152e0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
152f0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
15300 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
15310 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
15320 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
15330 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
15340 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
15350 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
15360 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
15370 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
15380 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
15390 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
153a0 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
153b0 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
153c0 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
153d0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
153e0 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
153f0 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
15400 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
15410 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
15420 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
15430 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
15440 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
15450 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
15460 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
15470 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
15480 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
15490 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
154a0 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
154b0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
154c0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
154d0 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
154e0 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
154f0 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
15500 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
15510 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
15520 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
15530 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
15540 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
15550 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
15560 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
15570 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
15580 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
15590 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
155a0 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
155b0 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
155c0 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
155d0 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
155e0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
155f0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
15600 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
15610 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
15620 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
15630 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
15640 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
15650 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
15660 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
15670 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
15680 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
15690 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
156a0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
156b0 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
156c0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
156d0 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
156e0 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
156f0 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
15700 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
15710 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
15720 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
15730 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
15740 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
15750 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
15760 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
15770 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
15780 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
15790 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
157a0 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
157b0 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
157c0 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
157d0 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
157e0 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
157f0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
15800 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[3];   /* OP_O
15810 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
15820 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
15830 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34   select */.  u64
15840 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
15850 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
15860 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
15870 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c  t rows */.  SrcL
15880 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
15890 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
158a0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
158b0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
158c0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
158d0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
158e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
158f0 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
15900 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
15910 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
15920 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
15930 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
15940 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
15950 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
15960 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
15970 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
15980 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
15990 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
159a0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
159b0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
159c0 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
159d0 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
159e0 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
159f0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
15a00 20 20 53 65 6c 65 63 74 20 2a 70 52 69 67 68 74    Select *pRight
15a10 6d 6f 73 74 3b 20 20 20 20 2f 2a 20 52 69 67 68  most;    /* Righ
15a20 74 2d 6d 6f 73 74 20 73 65 6c 65 63 74 20 69 6e  t-most select in
15a30 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
15a40 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
15a50 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
15a60 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
15a70 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
15a80 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
15a90 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f  d. */.  Expr *pO
15aa0 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ffset;         /
15ab0 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  * OFFSET express
15ac0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
15ad0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 7d 3b 0a  not used. */.};.
15ae0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
15af0 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74  alues for Select
15b00 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20  .selFlags.  The 
15b10 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e  "SF" prefix stan
15b20 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63  ds for.** "Selec
15b30 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66  t Flag"..*/.#def
15b40 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
15b50 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
15b60 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
15b70 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
15b80 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
15b90 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32  ed        0x0002
15ba0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
15bb0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
15bc0 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
15bd0 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
15be0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e    0x0004  /* Con
15bf0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
15c00 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
15c10 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
15c20 6d 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20  meral   0x0008  
15c30 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
15c40 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
15c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
15c60 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30  xpanded        0
15c70 78 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65  x0010  /* sqlite
15c80 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
15c90 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
15ca0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
15cb0 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30  TypeInfo     0x0
15cc0 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  020  /* FROM sub
15cd0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
15ce0 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
15cf0 64 65 66 69 6e 65 20 53 46 5f 55 73 65 53 6f 72  define SF_UseSor
15d00 74 65 72 20 20 20 20 20 20 20 30 78 30 30 34 30  ter       0x0040
15d10 20 20 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20    /* Sort using 
15d20 61 20 73 6f 72 74 65 72 20 2a 2f 0a 23 64 65 66  a sorter */.#def
15d30 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
15d40 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f         0x0080  /
15d50 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
15d60 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
15d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
15d80 61 74 65 72 69 61 6c 69 7a 65 20 20 20 20 20 30  aterialize     0
15d90 78 30 31 30 30 20 20 2f 2a 20 46 6f 72 63 65 20  x0100  /* Force 
15da0 6d 61 74 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20  materialization 
15db0 6f 66 20 76 69 65 77 73 20 2a 2f 0a 23 64 65 66  of views */.#def
15dc0 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
15dd0 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  m      0x0200  /
15de0 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
15df0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
15e00 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
15e10 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
15e20 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e      0x0400  /* N
15e30 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
15e40 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
15e50 65 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ery() */.../*.**
15e60 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
15e70 61 20 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20  a select can be 
15e80 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
15e90 65 76 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68  everal ways.  Th
15ea0 65 0a 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69  e.** "SRT" prefi
15eb0 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20  x means "SELECT 
15ec0 52 65 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f  Result Type"..*/
15ed0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
15ee0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
15ef0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
15f00 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
15f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15f20 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
15f30 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
15f40 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
15f50 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
15f60 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
15f70 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
15f80 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
15f90 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
15fa0 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
15fb0 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
15fc0 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
15fd0 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a  ts anywhere */..
15fe0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
15ff0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
16000 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
16010 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
16020 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
16030 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
16040 29 3c 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a  )<=SRT_Discard).
16050 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74  .#define SRT_Out
16060 70 75 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20  put       5  /* 
16070 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20  Output each row 
16080 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65  of result */.#de
16090 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20  fine SRT_Mem    
160a0 20 20 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72        6  /* Stor
160b0 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65  e result in a me
160c0 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65  mory cell */.#de
160d0 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20  fine SRT_Set    
160e0 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
160f0 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79  e results as key
16100 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
16110 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
16120 6c 65 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20  le        8  /* 
16130 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
16140 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
16150 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
16160 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
16170 6d 54 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43  mTab     9  /* C
16180 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
16190 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
161a0 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
161b0 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
161c0 75 74 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47  utine   10  /* G
161d0 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
161e0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
161f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
16200 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
16210 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68  ect describes wh
16220 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68  ere to put of th
16230 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20  e results of.** 
16240 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
16250 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  nt..*/.struct Se
16260 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20  lectDest {.  u8 
16270 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 2f  eDest;         /
16280 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65  * How to dispose
16290 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e   of the results.
162a0 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62    On of SRT_* ab
162b0 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61  ove. */.  char a
162c0 66 66 53 64 73 74 3b 20 20 20 20 20 2f 2a 20 41  ffSdst;     /* A
162d0 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
162e0 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
162f0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
16300 6d 3b 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72  m;      /* A par
16310 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
16320 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
16330 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
16340 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
16350 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
16360 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
16370 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
16380 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
16390 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
163a0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
163b0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
163c0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
163d0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
163e0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
163f0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
16400 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c  CREMENT .** tabl
16410 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
16420 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
16430 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
16440 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
16450 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
16460 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
16470 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
16480 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
16490 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
164a0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
164b0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
164c0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
164d0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
164e0 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
164f0 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
16500 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74  rts are down wit
16510 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
16520 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
16530 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
16540 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
16550 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
16560 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
16570 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
16580 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
16590 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
165a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
165b0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
165c0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
165d0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
165e0 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
165f0 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
16600 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
16610 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
16620 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
16630 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
16640 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
16650 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16660 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
16670 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
16680 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
16690 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
166a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
166b0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
166c0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
166d0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
166e0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
166f0 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
16700 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16710 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
16720 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
16730 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
16740 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
16750 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
16760 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
16770 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
16780 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a  ated for each .*
16790 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
167a0 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
167b0 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
167c0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
167d0 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
167e0 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
167f0 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
16800 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
16810 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
16820 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
16830 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
16840 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
16850 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
16860 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
16870 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
16880 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
16890 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
168a0 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
168b0 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
168c0 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
168d0 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
168e0 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
168f0 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
16900 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
16910 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
16920 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
16930 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
16940 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
16950 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
16960 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
16970 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
16980 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
16990 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
169a0 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
169b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
169c0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
169d0 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
169e0 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
169f0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
16a00 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
16a10 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
16a20 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
16a30 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20  esult of INSERT 
16a40 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
16a50 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
16a60 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
16a70 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
16a80 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
16a90 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
16aa0 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
16ab0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
16ac0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
16ad0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
16ae0 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
16af0 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
16b00 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
16b10 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
16b20 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
16b30 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
16b40 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
16b50 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
16b60 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
16b70 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
16b80 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
16b90 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
16ba0 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
16bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
16bc0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
16bd0 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
16be0 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
16bf0 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
16c00 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
16c10 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
16c20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
16c30 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
16c40 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
16c50 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
16c60 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
16c70 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
16c80 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
16c90 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  ef sqlite3_uint6
16ca0 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65  4 yDbMask;.#else
16cb0 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
16cc0 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b  ned int yDbMask;
16cd0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
16ce0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
16cf0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
16d00 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16d10 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
16d20 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
16d30 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
16d40 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
16d50 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
16d60 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
16d70 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
16d80 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
16d90 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
16da0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
16db0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
16dc0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
16dd0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
16de0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
16df0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
16e00 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
16e10 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
16e20 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
16e30 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
16e40 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
16e50 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
16e60 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
16e70 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
16e80 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
16e90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
16ea0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
16eb0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
16ec0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
16ed0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
16ee0 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
16ef0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
16f00 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
16f10 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
16f20 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
16f30 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
16f40 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
16f50 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
16f60 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
16f70 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
16f80 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
16f90 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
16fa0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
16fb0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
16fc0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
16fd0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
16fe0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
16ff0 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
17000 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
17010 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
17020 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
17030 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
17040 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
17050 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
17060 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
17070 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
17080 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
170a0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
170b0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
170c0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
170d0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
170e0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
170f0 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
17100 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
17110 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
17120 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
17130 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
17140 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
17150 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
17160 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
17170 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
17180 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
17190 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
171a0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
171b0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
171c0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
171d0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
171e0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
171f0 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b 20   u8 nTempInUse; 
17200 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17210 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63 75  of aTempReg[] cu
17220 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
17230 6f 75 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c  out */.  u8 nCol
17240 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a  Cache;        /*
17250 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
17260 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b  es in aColCache[
17270 5d 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43 61  ] */.  u8 iColCa
17280 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
17290 65 78 74 20 65 6e 74 72 79 20 69 6e 20 61 43 6f  ext entry in aCo
172a0 6c 43 61 63 68 65 5b 5d 20 74 6f 20 72 65 70 6c  lCache[] to repl
172b0 61 63 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  ace */.  u8 isMu
172c0 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
172d0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
172e0 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
172f0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
17300 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
17310 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
17320 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
17330 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
17340 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
17350 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
17360 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
17370 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
17380 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
17390 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
173a0 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
173b0 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
173c0 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
173d0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
173e0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
173f0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
17400 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
17410 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
17420 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
17430 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
17440 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
17450 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
17460 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
17470 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
17480 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17490 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
174a0 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
174b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
174c0 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
174d0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
174e0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
174f0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
17500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
17510 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
17520 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
17530 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
17540 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
17550 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
17560 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
17570 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17580 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
17590 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
175a0 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
175b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
175c0 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
175d0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
175e0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
175f0 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61 62   int iPartIdxTab
17600 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
17610 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
17620 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
17630 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
17640 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
17650 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
17660 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
17670 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
17680 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
17690 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
176a0 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
176b0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
176c0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
176d0 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
176e0 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
176f0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
17700 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
17710 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 6e  number */.    in
17720 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
17730 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
17740 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
17750 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
17760 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
17770 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
17780 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
17790 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
177a0 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
177b0 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
177c0 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
177d0 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
177e0 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
177f0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
17800 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
17810 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
17820 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
17830 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
17840 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
17850 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
17860 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
17870 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
17880 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
17890 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
178a0 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
178b0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
178c0 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
178d0 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
178e0 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
178f0 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
17900 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
17910 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
17920 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
17930 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
17940 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20  int cookieGoto; 
17950 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
17960 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f  of OP_Goto to co
17970 6f 6b 69 65 20 76 65 72 69 66 69 65 72 20 73 75  okie verifier su
17980 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e  broutine */.  in
17990 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51  t cookieValue[SQ
179a0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
179b0 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73  D+2];  /* Values
179c0 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76   of cookies to v
179d0 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72  erify */.  int r
179e0 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
179f0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
17a00 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
17a10 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
17a20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
17a30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
17a40 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
17a50 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
17a60 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
17a70 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b  /.  int nMaxArg;
17a80 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20           /* Max 
17a90 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75  args passed to u
17aa0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20  ser function by 
17ab0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
17ac0 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
17ad0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
17ae0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
17af0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
17b00 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65  parsed */.#ifnde
17b10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
17b20 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
17b30 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
17b40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17b50 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
17b60 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
17b70 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
17b80 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
17b90 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
17ba0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
17bb0 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
17bc0 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
17bd0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
17be0 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
17bf0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
17c00 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
17c10 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
17c20 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
17c30 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
17c40 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
17c50 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
17c60 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
17c70 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
17c80 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
17c90 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
17ca0 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
17cb0 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
17cc0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
17cd0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
17ce0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
17cf0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
17d00 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
17d10 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
17d20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
17d30 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
17d40 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
17d50 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
17d60 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
17d70 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
17d80 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
17d90 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
17da0 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
17db0 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
17dc0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
17dd0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
17de0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
17df0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
17e00 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
17e10 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
17e20 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
17e30 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
17e40 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41  ggers */..  /* A
17e50 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
17e60 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
17e70 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
17e80 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
17e90 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
17ea0 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20  recursion */..  
17eb0 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
17ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ed0 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
17ee0 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
17ef0 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
17f00 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
17f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17f20 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
17f30 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
17f40 5b 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  [] */.  u8 expla
17f50 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
17f60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
17f70 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
17f80 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
17f90 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
17fa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
17fb0 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
17fc0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
17fd0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
17fe0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
17ff0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
18000 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
18010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18020 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
18030 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
18040 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
18050 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
18060 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18070 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
18080 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
18090 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
180b0 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
180c0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
180d0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
180e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
180f0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
18100 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
18110 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
18120 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
18130 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
18140 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
18150 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
18160 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
18170 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
18180 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
18190 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
181a0 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
181b0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
181c0 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
181d0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
181e0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
181f0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
18200 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
18210 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
18220 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  e()) */.  int *a
18230 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
18240 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
18250 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69  used to hold ali
18260 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ased result */. 
18270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
18280 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
18290 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
182a0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
182b0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
182c0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
182d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
182e0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
182f0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
18300 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
18310 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
18320 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
18330 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
18340 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
18350 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
18360 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
18370 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
18380 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
18390 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
183a0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
183b0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
183c0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
183d0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
183e0 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
183f0 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
18400 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18410 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
18420 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
18430 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18440 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
18450 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
18460 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
18470 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
18480 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
18490 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
184a0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
184b0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
184c0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
184d0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
184e0 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
184f0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
18500 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
18510 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
18520 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
18530 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
18540 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
18550 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
18560 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
18570 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
18580 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
18590 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
185a0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
185b0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
185c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
185d0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
185e0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
185f0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
18600 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
18610 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
18620 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
18630 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
18640 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
18650 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
18660 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
18670 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
18680 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
18690 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
186a0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
186b0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
186c0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
186d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
186e0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
186f0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
18700 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
18710 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
18720 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
18730 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18750 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
18760 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
18770 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
18780 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
18790 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
187a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
187b0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
187c0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
187d0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
187e0 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
187f0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
18800 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f  ID     0x02    /
18810 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
18820 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
18830 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18840 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
18850 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
18860 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
18870 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
18880 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
18890 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
188a0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
188b0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
188c0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
188d0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
188e0 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
188f0 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
18900 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
18910 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
18920 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
18930 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c     0x20    /* Cl
18940 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  ear pseudo-table
18950 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c   cache in OP_Col
18960 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  umn */.#define O
18970 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
18980 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
18990 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
189a0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
189b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
189c0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
189d0 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
189e0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
189f0 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
18a00 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
18a10 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
18a20 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
18a30 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
18a40 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
18a50 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
18a60 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20  REG       0x02  
18a70 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
18a80 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
18a90 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
18aa0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
18ab0 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
18ac0 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
18ad0 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
18ae0 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
18af0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
18b00 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
18b10 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
18b20 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
18b30 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
18b40 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
18b50 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
18b60 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
18b70 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
18b80 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
18b90 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
18ba0 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
18bb0 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
18bc0 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
18bd0 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
18be0 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
18bf0 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
18c00 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
18c10 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
18c20 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
18c30 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
18c40 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
18c50 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
18c60 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
18c70 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
18c80 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
18c90 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
18ca0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
18cb0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
18cc0 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
18cd0 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
18ce0 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
18cf0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
18d00 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
18d10 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
18d20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
18d30 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
18d40 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
18d50 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
18d60 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
18d70 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
18d80 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
18d90 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
18da0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
18db0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
18dc0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
18dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
18de0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
18df0 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
18e10 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
18e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18e30 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
18e40 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
18e50 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
18e60 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
18e70 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
18e80 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
18e90 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
18ea0 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
18eb0 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
18ec0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
18ed0 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
18ee0 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
18ef0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
18f00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18f10 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
18f20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
18f30 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
18f40 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
18f50 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
18f60 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
18f70 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
18f80 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
18fb0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
18fc0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
18fd0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
18fe0 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
18ff0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
19000 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
19010 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
19020 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
19030 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
19040 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
19050 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
19060 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
19070 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
19080 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
19090 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
190a0 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
190b0 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
190c0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
190d0 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
190e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
190f0 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
19100 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
19110 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
19120 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
19130 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
19140 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
19150 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
19160 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
19170 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
19180 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
19190 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
191a0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
191b0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
191c0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
191d0 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
191e0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
191f0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
19200 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
19210 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
19220 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
19230 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
19240 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
19250 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
19260 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
19270 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
19280 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
19290 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
192a0 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
192b0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
192c0 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
192d0 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
192e0 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
192f0 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
19300 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
19310 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
19320 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
19330 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
19340 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
19350 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
19360 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
19370 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
19380 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
19390 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
193a0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
193b0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
193c0 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
193d0 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
193e0 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
193f0 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
19400 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
19410 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
19420 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
19430 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
19440 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
19450 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
19460 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
19470 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
19480 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
19490 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
194a0 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
194b0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
194c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
194d0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
194e0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
194f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
19500 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
19510 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
19520 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
19530 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
19540 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
19550 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
19560 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
19570 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
19580 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
19590 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
195a0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
195b0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
195c0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
195d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
195e0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
195f0 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
19600 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
19610 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
19620 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
19630 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
19640 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
19650 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
19670 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
19680 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
19690 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
196a0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
196b0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
196c0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
196d0 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
196e0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
196f0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
19700 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
19710 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
19720 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
19730 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
19740 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
19750 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
19760 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
19770 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
19780 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
19790 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
197a0 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74   TK_UPDATE). * t
197b0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
197c0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
197d0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
197e0 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
197f0 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70  te rows of.. * p
19800 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
19810 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
19820 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
19830 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
19840 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
19850 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
19860 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
19870 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
19880 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
19890 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
198a0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
198b0 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
198c0 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
198d0 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
198e0 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
198f0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
19900 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19910 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
19920 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
19930 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19950 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
19960 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
19970 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
19980 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
19990 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
199a0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
199b0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
199c0 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
199d0 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
199e0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
199f0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
19a00 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
19a10 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d   /* SELECT statm
19a20 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
19a30 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c  SERT INTO .. SEL
19a40 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b  ECT ... */.  Tok
19a50 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20  en target;      
19a60 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
19a70 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
19a80 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
19a90 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
19aa0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
19ab0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
19ac0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
19ad0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
19ae0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
19af0 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
19b00 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45  r UPDATE.  VALUE
19b10 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53  S clause for INS
19b20 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  ERT */.  IdList 
19b30 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
19b40 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
19b50 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
19b60 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
19b70 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
19b80 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
19b90 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
19ba0 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
19bb0 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
19bc0 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
19bd0 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
19be0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
19bf0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
19c00 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
19c10 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
19c20 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
19c30 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
19c40 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
19c50 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
19c60 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
19c70 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20  es.** explicit. 
19c80 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72   .*/.typedef str
19c90 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
19ca0 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
19cb0 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
19cc0 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
19cd0 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
19ce0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
19cf0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
19d00 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
19d10 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
19d20 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
19d30 63 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74  chema */.  const
19d40 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
19d50 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
19d60 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
19d70 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
19d80 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
19d90 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
19da0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
19db0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
19dc0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
19dd0 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
19de0 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
19df0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
19e00 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
19e10 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
19e20 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
19e30 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
19e40 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
19e50 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
19e60 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
19e70 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
19e80 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
19e90 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
19ea0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
19eb0 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
19ec0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
19ed0 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
19ee0 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
19ef0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
19f00 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
19f10 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
19f20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
19f30 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
19f40 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
19f50 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
19f60 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
19f70 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
19f80 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
19f90 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
19fa0 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
19fb0 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
19fc0 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
19fd0 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
19fe0 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
19ff0 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1a000 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1a010 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1a020 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20   allowed string 
1a030 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20  length */.  u8  
1a040 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
1a050 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
1a060 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1a070 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
1a080 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61  lloc */.  u8   a
1a090 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1a0a0 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1a0b0 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1a0c0 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1a0d0 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1a0e0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1a0f0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1a100 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1a110 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1a120 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1a130 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1a140 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1a150 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1a160 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1a170 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1a180 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1a190 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1a1a0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a1b0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1a1c0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1a1d0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1a1e0 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1a1f0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1a200 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1a210 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1a220 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1a230 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1a240 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1a250 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1a260 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1a270 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1a280 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1a290 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1a2a0 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1a2b0 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1a2c0 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1a2d0 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1a2e0 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1a2f0 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1a300 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1a310 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1a320 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1a330 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1a340 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1a350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a360 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1a370 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1a380 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1a390 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a3b0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1a3c0 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1a3d0 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1a3e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a3f0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1a400 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1a410 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1a420 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1a430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a440 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1a450 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1a460 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1a470 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1a480 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1a490 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1a4a0 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1a4b0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1a4c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1a4d0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1a4e0 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1a4f0 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
1a500 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1a510 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1a520 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1a530 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
1a540 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a560 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1a570 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
1a580 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
1a590 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
1a5a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
1a5b0 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
1a5c0 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
1a5d0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1a5e0 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
1a5f0 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
1a600 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
1a610 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1a620 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
1a630 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
1a640 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
1a650 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
1a660 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
1a690 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
1a6a0 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
1a6d0 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
1a6e0 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1a700 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
1a710 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
1a720 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1a730 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
1a740 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
1a750 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
1a760 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
1a770 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
1a780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1a790 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
1a7a0 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
1a7b0 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a7d0 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1a7e0 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1a7f0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1a800 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a810 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1a820 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1a830 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a850 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1a860 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1a870 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1a8a0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1a8b0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a8d0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
1a8e0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1a8f0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a920 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1a930 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1a940 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1a950 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1a960 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1a970 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1a980 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1a990 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1a9a0 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1a9b0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1a9c0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f  e enabled */.  /
1a9d0 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1a9e0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1a9f0 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1aa00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1aa10 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1aa20 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1aa30 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1aa40 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1aa70 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1aa80 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1aa90 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1aaa0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1aab0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1aac0 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1aad0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1aae0 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1aaf0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ab00 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1ab10 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1ab20 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ab30 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1ab40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ab50 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1ab60 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1ab70 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1ab80 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aba0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1abb0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1abc0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1abd0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1abe0 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1abf0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1ac00 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1ac10 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1ac20 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1ac30 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ac40 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1ac50 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20  Mutex */.  void 
1ac60 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1ac70 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1ac80 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1ac90 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1aca0 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1acd0 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1ace0 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1acf0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1ad00 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1ad10 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1ad20 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66   calls */.#ifdef
1ad30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1ad40 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1ad50 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1ad60 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ad70 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1ad80 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1ad90 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f  dif.};../*.** Co
1ada0 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1adb0 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1adc0 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1add0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1ade0 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1adf0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1ae00 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1ae10 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1ae20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1ae30 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1ae40 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1ae50 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1ae60 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1ae70 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1ae80 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1aeb0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1aec0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aef0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1af00 20 20 75 38 20 62 53 65 6c 65 63 74 44 65 70 74    u8 bSelectDept
1af10 68 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 20  hFirst;         
1af20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1af30 6f 20 73 75 62 71 75 65 72 69 65 73 20 66 69 72  o subqueries fir
1af40 73 74 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  st */.  union { 
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
1af80 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
1af90 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
1afa0 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1afc0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
1afd0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
1b010 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  lue */.    SrcLi
1b020 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b040 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
1b050 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
1b060 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
1b070 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
1b080 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
1b090 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
1b0a0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  nces */.  } u;.}
1b0b0 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
1b0c0 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
1b0d0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1b0e0 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
1b0f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1b100 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
1b110 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
1b120 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1b130 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
1b140 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1b150 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
1b160 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
1b170 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1b180 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
1b190 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1b1a0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  );../*.** Return
1b1b0 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
1b1c0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
1b1d0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
1b1e0 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
1b1f0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
1b200 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
1b210 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
1b220 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
1b230 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
1b240 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
1b250 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
1b260 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
1b270 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
1b280 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1b290 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
1b2a0 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
1b2b0 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
1b2c0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
1b2d0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1b2e0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
1b2f0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
1b300 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
1b310 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
1b320 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
1b330 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
1b340 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
1b350 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
1b360 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
1b390 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
1b3c0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
1b3d0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
1b3e0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
1b3f0 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
1b430 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
1b440 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
1b450 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
1b460 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
1b470 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
1b480 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
1b490 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
1b4a0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
1b4b0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
1b4c0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
1b4d0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
1b4e0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
1b4f0 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
1b500 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
1b510 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
1b520 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
1b530 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
1b540 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
1b550 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
1b560 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
1b570 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1b580 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1b590 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1b5a0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1b5b0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1b5c0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
1b5d0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1b5e0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
1b5f0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1b600 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
1b610 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
1b620 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
1b630 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1b640 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
1b650 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
1b660 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
1b670 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
1b680 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
1b690 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
1b6a0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
1b6b0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
1b6c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1b6d0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
1b6e0 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
1b6f0 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74  we also all.** t
1b700 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
1b710 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
1b720 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73  erve as an aliss
1b730 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  e for SQLITE_ENA
1b740 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
1b750 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1b760 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
1b770 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1b780 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
1b790 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
1b7a0 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a  BLE_FTS3.#endif.
1b7b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
1b7c0 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
1b7d0 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
1b7e0 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
1b7f0 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
1b800 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
1b810 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
1b820 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
1b830 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
1b840 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
1b850 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
1b860 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1b870 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
1b880 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
1b890 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
1b8a0 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
1b8b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
1b8c0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1b8d0 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
1b8e0 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
1b8f0 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
1b900 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
1b910 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
1b920 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
1b930 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
1b940 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
1b950 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
1b960 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
1b970 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
1b980 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
1b990 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
1b9a0 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
1b9b0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1b9c0 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
1b9d0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1b9e0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
1b9f0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1ba00 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
1ba10 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1ba20 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1ba30 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
1ba40 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
1ba50 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
1ba60 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1ba70 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1ba80 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
1ba90 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1baa0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1bab0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1bac0 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
1bad0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1bae0 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
1baf0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1bb00 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1bb10 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
1bb20 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1bb30 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1bb40 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1bb50 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
1bb60 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1bb70 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
1bb80 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
1bb90 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1bba0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1bbb0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1bbc0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
1bbd0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1bbe0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bbf0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
1bc00 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
1bc10 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1bc20 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1bc30 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
1bc40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1bc50 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1bc60 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1bc70 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
1bc80 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1bc90 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
1bca0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
1bcb0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1bcc0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1bcd0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
1bce0 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
1bcf0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1bd00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1bd10 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
1bd20 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
1bd30 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a  ar)(x)).#endif..
1bd40 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
1bd50 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
1bd60 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
1bd70 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
1bd80 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
1bd90 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
1bda0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1bdb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1bdc0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
1bdd0 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
1bde0 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
1bdf0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1be00 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
1be10 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1be20 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1be30 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1be40 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20  Zero(int);.void 
1be50 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1be60 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69  Zero(sqlite3*, i
1be70 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1be80 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
1be90 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
1bea0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1beb0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1bec0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
1bed0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
1bee0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1bef0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   char*, int);.vo
1bf00 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
1bf10 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a  oc(void*, int);.
1bf20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1bf30 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
1bf40 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1bf50 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1bf60 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
1bf70 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1bf80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1bf90 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
1bfa0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
1bfb0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
1bfc0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
1bfd0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
1bfe0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1bff0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c000 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
1c010 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c020 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
1c030 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
1c040 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
1c050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
1c060 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
1c070 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
1c080 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
1c090 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
1c0a0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
1c0b0 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
1c0c0 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69  id (*)(void));.i
1c0d0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
1c0e0 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
1c0f0 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
1c100 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
1c110 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
1c120 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
1c130 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
1c140 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
1c150 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
1c160 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
1c170 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
1c180 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
1c190 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
1c1a0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
1c1b0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
1c1c0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
1c1d0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
1c1e0 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
1c1f0 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
1c200 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
1c210 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
1c220 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
1c230 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1c240 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
1c250 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1c260 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1c270 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
1c280 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c290 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1c2a0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
1c2b0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
1c2c0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1c2d0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
1c2e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1c2f0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1c300 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
1c310 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
1c320 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1c330 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1c340 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
1c350 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
1c360 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c370 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1c380 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1c390 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
1c3a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1c3b0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
1c3c0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1c3d0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1c3e0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
1c3f0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
1c400 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1c410 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
1c420 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1c430 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1c440 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
1c450 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
1c460 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
1c470 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
1c480 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1c490 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
1c4a0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1c4b0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1c4c0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1c4d0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
1c4e0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1c4f0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
1c500 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
1c510 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
1c520 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
1c530 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
1c540 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1c550 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75  int sqlite3Statu
1c560 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
1c570 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41  d sqlite3StatusA
1c580 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  dd(int, int);.vo
1c590 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
1c5a0 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  Set(int, int);..
1c5b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c5c0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1c5d0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
1c5e0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
1c5f0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1c600 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
1c610 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
1c620 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
1c630 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f  rAccum*, int, co
1c640 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1c650 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
1c660 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76  ITE_OMIT_TRACE.v
1c670 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
1c680 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
1c690 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1c6a0 0a 23 65 6e 64 69 66 0a 63 68 61 72 20 2a 73 71  .#endif.char *sq
1c6b0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
1c6c0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1c6d0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
1c6e0 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
1c6f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1c700 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63  ar*, va_list);.c
1c710 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
1c720 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68  endf(sqlite3*,ch
1c730 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
1c740 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ...);.#if define
1c750 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
1c760 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
1c770 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
1c780 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
1c790 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
1c7a0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
1c7b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1c7c0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
1c7d0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
1c7e0 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
1c7f0 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75  #endif../* Outpu
1c800 74 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72  t formatting for
1c810 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1c820 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20  _EXPLAIN */.#if 
1c830 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1c840 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41  NABLE_TREE_EXPLA
1c850 49 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IN).  void sqlit
1c860 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56  e3ExplainBegin(V
1c870 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1c880 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e  lite3ExplainPrin
1c890 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  tf(Vdbe*, const 
1c8a0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76  char*, ...);.  v
1c8b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c8c0 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76  inNL(Vdbe*);.  v
1c8d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c8e0 69 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20  inPush(Vdbe*);. 
1c8f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1c900 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a  lainPop(Vdbe*);.
1c910 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1c920 70 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65  plainFinish(Vdbe
1c930 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1c940 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28  e3ExplainSelect(
1c950 56 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Vdbe*, Select*);
1c960 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1c970 78 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a  xplainExpr(Vdbe*
1c980 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
1c990 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1c9a0 78 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45  xprList(Vdbe*, E
1c9b0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e  xprList*);.  con
1c9c0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1c9d0 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28  VdbeExplanation(
1c9e0 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Vdbe*);.#else.# 
1c9f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1ca00 70 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20  plainBegin(X).# 
1ca10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1ca20 70 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29  plainSelect(A,B)
1ca30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ca40 33 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42  3ExplainExpr(A,B
1ca50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ca60 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1ca70 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1ca80 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
1ca90 6e 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65  nish(X).# define
1caa0 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c   sqlite3VdbeExpl
1cab0 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e  anation(X) 0.#en
1cac0 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
1cad0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
1cae0 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
1caf0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1cb00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
1cb10 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
1cb20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1cb30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71  ;.int sqlite3Deq
1cb40 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74  uote(char*);.int
1cb50 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
1cb60 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
1cb70 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
1cb80 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
1cb90 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
1cba0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
1cbb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cbc0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
1cbd0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1cbe0 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
1cbf0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1cc00 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
1cc10 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
1cc20 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
1cc30 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
1cc40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1cc50 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
1cc60 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
1cc70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
1cc80 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
1cc90 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  rse*);.Expr *sql
1cca0 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
1ccb0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1ccc0 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
1ccd0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
1cce0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1ccf0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1cd00 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
1cd10 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
1cd20 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
1cd30 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1cd40 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
1cd50 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
1cd60 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
1cd70 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1cd80 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33  3ExprAnd(sqlite3
1cd90 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  *,Expr*, Expr*);
1cda0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1cdb0 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65  prFunction(Parse
1cdc0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  *,ExprList*, Tok
1cdd0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1cde0 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
1cdf0 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
1ce00 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1ce10 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
1ce20 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
1ce30 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
1ce40 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
1ce50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1ce60 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1ce70 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
1ce80 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
1ce90 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
1cea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ceb0 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
1cec0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
1ced0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1cee0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
1cef0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1cf00 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1cf10 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
1cf20 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
1cf30 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
1cf40 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
1cf50 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
1cf60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cf70 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
1cf80 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
1cf90 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
1cfa0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
1cfb0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
1cfc0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1cfd0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
1cfe0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
1cff0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d000 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
1d010 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
1d020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1d030 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
1d040 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1d050 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
1d060 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
1d070 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1d080 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
1d090 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
1d0a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d0b0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
1d0c0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
1d0d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
1d0e0 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
1d0f0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
1d100 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  int,int,int);.vo
1d110 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
1d120 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
1d130 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d140 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
1d150 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1d160 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
1d170 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
1d180 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
1d190 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d1a0 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
1d1b0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
1d1c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d1d0 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50  3AddColumnType(P
1d1e0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
1d1f0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
1d200 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
1d210 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
1d220 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
1d230 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
1d240 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1d250 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
1d260 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1d270 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  en*,Select*);.in
1d280 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
1d290 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
1d2a0 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
1d2b0 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
1d2d0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
1d2e0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
1d2f0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
1d300 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
1d310 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
1d320 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
1d330 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69  ce(Parse *);..Bi
1d340 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
1d350 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
1d360 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1d370 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
1d380 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
1d390 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
1d3a0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
1d3b0 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
1d3c0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
1d3d0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
1d3e0 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
1d3f0 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
1d400 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
1d410 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73  (Bitvec*);.int s
1d420 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
1d430 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
1d440 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  );..RowSet *sqli
1d450 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
1d460 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
1d470 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
1d480 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
1d490 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
1d4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
1d4b0 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
1d4c0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
1d4d0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
1d4e0 77 53 65 74 2a 2c 20 75 38 20 69 42 61 74 63 68  wSet*, u8 iBatch
1d4f0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
1d500 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
1d510 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
1d520 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
1d530 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
1d540 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
1d550 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
1d560 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
1d570 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
1d580 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
1d590 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1d5a0 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
1d5b0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
1d5c0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
1d5d0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
1d5e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d5f0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
1d600 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
1d610 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ..void sqlite3Dr
1d620 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
1d630 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1d640 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d650 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
1d660 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1d670 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d680 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
1d690 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
1d6a0 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
1d6b0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
1d6c0 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
1d6d0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
1d6e0 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
1d6f0 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
1d700 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1d710 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
1d720 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
1d730 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1d740 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
1d750 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1d760 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1d770 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e  End(X).#endif.in
1d780 74 20 73 71 6c 69 74 65 33 43 6f 64 65 43 6f 72  t sqlite3CodeCor
1d790 6f 75 74 69 6e 65 28 50 61 72 73 65 2a 2c 20 53  outine(Parse*, S
1d7a0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1d7b0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1d7c0 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
1d7d0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
1d7e0 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
1d7f0 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
1d800 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
1d810 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
1d820 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
1d830 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
1d840 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
1d850 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
1d860 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1d870 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
1d880 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
1d890 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
1d8a0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
1d8b0 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
1d8c0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
1d8d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
1d8e0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1d8f0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1d900 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
1d910 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
1d920 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1d930 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
1d940 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
1d950 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
1d960 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
1d990 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
1d9a0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
1d9b0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1d9c0 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
1d9d0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
1d9e0 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  oken *);.int sql
1d9f0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
1da00 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
1da10 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1da20 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
1da30 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
1da40 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
1da50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1da60 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
1da70 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
1da80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1da90 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
1daa0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
1dab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1dac0 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
1dad0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
1dae0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43  .Index *sqlite3C
1daf0 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
1db00 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1db10 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
1db20 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
1db50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1db60 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
1db70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1db80 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1db90 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
1dba0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
1dbb0 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
1dbc0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
1dbd0 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
1dbe0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
1dbf0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
1dc20 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a  rList*,u16,Expr*
1dc30 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
1dc40 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
1dc50 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
1dc60 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
1dc70 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
1dc80 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
1dc90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1dca0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
1dcb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
1dcc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1dcd0 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
1dce0 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
1dcf0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
1dd00 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1dd10 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
1dd20 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
1dd30 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1dd40 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
1dd50 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
1dd60 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
1dd70 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1dd80 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
1dd90 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
1dda0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
1ddb0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
1ddc0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
1ddd0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1dde0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
1ddf0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
1de00 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
1de10 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
1de20 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
1de30 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
1de40 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
1de50 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
1de60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
1de70 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
1de80 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33  o*);.u64 sqlite3
1de90 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f  WhereOutputRowCo
1dea0 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  unt(WhereInfo*);
1deb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
1dec0 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72  eIsDistinct(Wher
1ded0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1dee0 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72  ite3WhereIsOrder
1def0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
1df00 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
1df10 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
1df20 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
1df30 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
1df40 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
1df50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
1df60 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
1df70 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1df80 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
1df90 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
1dfa0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
1dfb0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
1dfc0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1dfd0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
1dfe0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
1dff0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1e000 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e010 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
1e020 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1e030 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e040 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
1e050 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e060 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e070 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
1e080 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1e090 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
1e0a0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1e0b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1e0c0 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
1e0d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e0e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1e0f0 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
1e100 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e110 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
1e120 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
1e130 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1e140 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
1e150 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1e160 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e170 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
1e180 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
1e190 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1e1a0 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
1e1b0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
1e1c0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e1d0 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
1e1e0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
1e1f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1e200 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72 73  deConstants(Pars
1e210 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  e*, Expr*);.int 
1e220 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
1e230 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
1e240 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1e250 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e260 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
1e270 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
1e280 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e290 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
1e2a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1e2b0 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
1e2c0 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
1e2d0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1e2e0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e2f0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1e300 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
1e310 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
1e320 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
1e330 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
1e340 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
1e350 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
1e360 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
1e370 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1e380 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
1e390 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
1e3a0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1e3b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1e3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1e3d0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
1e3e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1e3f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1e400 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1e410 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
1e420 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1e430 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1e440 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
1e450 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
1e460 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
1e470 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
1e480 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
1e490 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
1e4a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1e4b0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
1e4c0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
1e4d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e4e0 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
1e4f0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
1e500 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
1e510 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
1e520 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78  esExpr(Expr*, Ex
1e530 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
1e540 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
1e550 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
1e560 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
1e570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e580 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
1e590 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
1e5a0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1e5b0 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73  qlite3FunctionUs
1e5c0 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c  esThisSrc(Expr*,
1e5d0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65   SrcList*);.Vdbe
1e5e0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65   *sqlite3GetVdbe
1e5f0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e600 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
1e610 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1e620 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
1e630 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  reState(void);.v
1e640 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
1e650 65 73 65 74 53 74 61 74 65 28 76 6f 69 64 29 3b  esetState(void);
1e660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
1e670 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
1e680 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1e690 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
1e6a0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
1e6b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e6c0 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63  odeVerifyNamedSc
1e6d0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e  hema(Parse*, con
1e6e0 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76  st char *zDb);.v
1e6f0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1e700 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1e710 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e720 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e  qlite3CommitTran
1e730 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
1e740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
1e750 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e  lbackTransaction
1e760 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e770 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
1e780 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
1e790 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1e7a0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
1e7b0 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
1e7c0 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
1e7d0 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
1e7e0 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
1e7f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
1e800 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
1e810 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1e820 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
1e830 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1e840 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1e850 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
1e860 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e870 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
1e880 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
1e890 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
1e8a0 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
1e8b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e8c0 78 70 72 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d  xprCodeIsNullJum
1e8d0 70 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45  p(Vdbe*, const E
1e8e0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
1e8f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e900 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
1e910 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
1e920 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
1e930 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
1e940 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1e950 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
1e960 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  owDelete(Parse*,
1e970 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e980 74 2c 20 69 6e 74 2c 20 54 72 69 67 67 65 72 20  t, int, Trigger 
1e990 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1e9a0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
1e9b0 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
1e9c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e9d0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1e9e0 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
1e9f0 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
1ea00 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
1ea10 74 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  t, int*);.void s
1ea20 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
1ea30 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
1ea40 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
1ea50 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2a 2c             int*,
1ea80 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
1ea90 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
1eaa0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
1eab0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  tion(Parse*, Tab
1eac0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1ead0 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  nt*, int, int, i
1eae0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1eaf0 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
1eb00 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
1eb10 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1eb20 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1eb30 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
1eb40 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1eb50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
1eb60 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
1eb70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1eb80 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
1eb90 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
1eba0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
1ebb0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
1ebc0 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
1ebd0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
1ebe0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
1ebf0 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
1ec00 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
1ec10 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
1ec20 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
1ec30 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1ec40 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
1ec50 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
1ec60 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1ec70 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
1ec80 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
1ec90 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
1eca0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1ecb0 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
1ecc0 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
1ecd0 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
1ece0 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
1ecf0 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
1ed00 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
1ed10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
1ed20 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
1ed30 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1ed40 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
1ed50 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
1ed60 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1ed70 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
1ed80 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
1ed90 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
1eda0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
1edb0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
1edc0 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
1edd0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
1ede0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
1edf0 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
1ee00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ee10 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
1ee20 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
1ee30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1ee40 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
1ee50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1ee60 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
1ee70 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
1ee80 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
1ee90 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
1eea0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
1eeb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1eec0 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
1eed0 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
1eee0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
1eef0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
1ef00 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
1ef10 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1ef30 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
1ef40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
1ef50 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
1ef60 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
1ef70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
1ef80 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1ef90 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
1efa0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
1efb0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1efc0 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
1efd0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
1efe0 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
1eff0 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
1f000 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
1f010 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
1f020 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
1f030 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1f040 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
1f050 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
1f060 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
1f070 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
1f080 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
1f090 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1f0a0 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
1f0d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f0e0 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1f0f0 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
1f100 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
1f110 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
1f120 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f130 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
1f140 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1f150 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
1f160 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
1f170 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
1f180 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
1f190 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
1f1a0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f1b0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
1f1c0 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
1f1d0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
1f1e0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1f1f0 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
1f200 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1f210 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c        ExprList*,
1f250 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
1f260 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1f270 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
1f280 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1f290 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
1f2a0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
1f2b0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1f2c0 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
1f2d0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1f2e0 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
1f2f0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1f300 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
1f310 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
1f320 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1f330 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
1f340 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
1f350 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
1f360 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
1f370 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
1f380 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
1f390 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
1f3a0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
1f3b0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
1f3c0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
1f3d0 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
1f3e0 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
1f3f0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1f400 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
1f410 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
1f420 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
1f430 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
1f440 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1f450 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
1f460 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
1f470 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
1f480 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1f490 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
1f4a0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1f4b0 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
1f4c0 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
1f4d0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
1f4e0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
1f4f0 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
1f500 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1f510 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
1f520 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f530 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
1f540 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
1f550 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
1f560 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
1f570 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
1f580 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
1f590 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
1f5a0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
1f5b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
1f5c0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
1f5d0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1f5e0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
1f5f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1f600 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
1f610 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
1f620 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1f630 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
1f640 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
1f650 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
1f660 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
1f670 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
1f680 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
1f690 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
1f6a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1f6b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1f6c0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1f6d0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1f6e0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
1f6f0 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
1f700 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
1f710 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1f720 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
1f730 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
1f740 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
1f750 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1f760 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
1f770 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
1f780 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1f790 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
1f7a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f7b0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
1f7c0 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
1f7d0 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
1f7e0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
1f7f0 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
1f800 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
1f810 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
1f820 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
1f830 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
1f840 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
1f850 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
1f860 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
1f870 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
1f880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f890 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
1f8a0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
1f8b0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1f8c0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
1f8d0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
1f8e0 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
1f8f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1f900 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
1f910 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1f920 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
1f930 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
1f940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f950 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
1f960 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
1f970 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
1f980 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
1f990 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
1f9a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
1f9b0 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
1f9c0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
1f9d0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
1f9e0 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
1f9f0 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
1fa00 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
1fa10 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1fa20 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
1fa30 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
1fa40 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
1fa50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
1fa60 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
1fa70 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
1fa80 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
1fa90 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
1faa0 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  t u8**);../*.** 
1fab0 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
1fac0 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
1fad0 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
1fae0 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
1faf0 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
1fb00 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
1fb10 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
1fb20 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
1fb30 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
1fb40 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c  ile.  Code shoul
1fb50 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20  d use the MACRO 
1fb60 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20  forms below, as 
1fb70 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72  the Varint32 ver
1fb80 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64  sions.** are cod
1fb90 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65  ed to assume the
1fba0 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73   single byte cas
1fbb0 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e  e is already han
1fbc0 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20  dled (which .** 
1fbd0 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64  the MACRO form d
1fbe0 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oes)..*/.int sql
1fbf0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
1fc00 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
1fc10 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  4);.int sqlite3P
1fc20 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67  utVarint32(unsig
1fc30 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b  ned char*, u32);
1fc40 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
1fc50 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
1fc60 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
1fc70 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
1fc80 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
1fc90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
1fca0 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
1fcb0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
1fcc0 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
1fcd0 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63   header of a rec
1fce0 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ord consists of 
1fcf0 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61  a sequence varia
1fd00 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
1fd10 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e  ers..** These in
1fd20 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73  tegers are almos
1fd30 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61  t always small a
1fd40 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  nd are encoded a
1fd50 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  s a single byte.
1fd60 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1fd70 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64  g macros take ad
1fd80 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63  vantage this fac
1fd90 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66  t to provide a f
1fda0 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e  ast encode.** an
1fdb0 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20  d decode of the 
1fdc0 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65  integers in a re
1fdd0 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74  cord header.  It
1fde0 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74   is faster for t
1fdf0 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73  he common.** cas
1fe00 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65  e where the inte
1fe10 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ger is a single 
1fe20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c  byte.  It is a l
1fe30 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65  ittle slower whe
1fe40 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  n the.** integer
1fe50 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   is two or more 
1fe60 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72  bytes.  But over
1fe70 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72  all it is faster
1fe80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
1fe90 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
1fea0 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1feb0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  :.**.**     x = 
1fec0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1fed0 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20  32( A, &B );.** 
1fee0 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50      x = sqlite3P
1fef0 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
1ff00 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20   );.**.**     x 
1ff10 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41  = getVarint32( A
1ff20 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20  , B );.**     x 
1ff30 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41  = putVarint32( A
1ff40 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65  , B );.**.*/.#de
1ff50 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
1ff60 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
1ff70 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
1ff80 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
1ff90 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
1ffa0 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
1ffb0 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
1ffc0 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
1ffd0 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
1ffe0 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
1fff0 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
20000 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
20010 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
20020 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66  2((A),(B))).#def
20030 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
20040 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
20050 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
20060 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
20070 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
20080 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
20090 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
200a0 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
200b0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
200c0 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  eAffinityStr(Vdb
200d0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63  e *, Table *);.c
200e0 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
200f0 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
20100 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
20110 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
20120 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
20130 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
20140 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
20150 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
20160 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
20170 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
20180 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
20190 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
201a0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
201b0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
201c0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
201d0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
201e0 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
201f0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
20200 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
20210 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
20220 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
20230 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
20240 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
20250 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
20260 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
20270 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
20280 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
20290 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c  QLITE_TEST) || \
202a0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
202b0 49 54 45 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41  ITE_DEBUG_OS_TRA
202c0 43 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  CE).const char *
202d0 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
202e0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
202f0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
20300 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
20310 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
20320 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
20330 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20340 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
20350 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
20360 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
20370 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
20380 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
20390 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
203a0 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
203b0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
203c0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
203d0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
203e0 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
203f0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
20400 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
20410 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
20420 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  , Token*);.Expr 
20430 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
20440 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
20450 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
20460 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
20470 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
20480 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
20490 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
204a0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
204b0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
204c0 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
204d0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
204e0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
204f0 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
20500 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
20510 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20520 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
20530 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
20540 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
20550 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
20560 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
20570 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
20580 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
20590 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
205a0 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
205b0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
205c0 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
205d0 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
205e0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
205f0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
20600 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
20610 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
20620 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74  onst char *z,int
20630 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
20640 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
20650 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
20660 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
20670 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
20680 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
20690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
206a0 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
206b0 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
206c0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
206d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206e0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
206f0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
20700 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
20710 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
20720 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
20730 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
20740 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20  qlite3 *);.char 
20750 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38  *sqlite3Utf16to8
20760 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
20770 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38  t void*, int, u8
20780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
20790 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
207a0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
207b0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
207c0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
207d0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
207e0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
207f0 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
20800 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
20810 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
20820 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
20830 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
20840 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
20850 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
20860 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
20870 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20880 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
20890 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
208a0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
208b0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
208c0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
208d0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
208e0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
208f0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
20900 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
20910 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
20920 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
20930 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
20940 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
20950 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
20960 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
20970 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
20980 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
20990 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
209a0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
209b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
209c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
209d0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
209e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
209f0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
20a00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
20a10 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
20a20 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
20a30 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
20a40 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
20a50 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
20a60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
20a70 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
20a80 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
20a90 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
20aa0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
20ab0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
20ac0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
20ad0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
20ae0 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
20af0 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
20b00 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
20b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
20b20 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
20b30 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
20b40 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
20b50 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
20b60 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
20b70 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20b80 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
20b90 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20ba0 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
20bb0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
20bc0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
20bd0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
20be0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
20bf0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
20c00 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
20c10 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
20c20 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
20c30 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
20c40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
20c50 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
20c60 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
20c70 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
20c80 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
20c90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20ca0 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
20cb0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
20cc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20cd0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
20ce0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
20cf0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
20d00 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
20d10 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
20d20 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
20d30 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
20d40 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
20d50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
20d60 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
20d70 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20d80 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
20d90 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
20da0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
20db0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
20dc0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20dd0 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
20de0 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
20df0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20e00 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
20e10 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
20e20 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
20e30 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
20e40 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
20e50 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
20e60 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
20e70 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
20e80 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
20e90 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
20ea0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
20eb0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
20ec0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
20ed0 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
20ee0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
20ef0 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
20f00 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
20f10 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
20f20 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
20f30 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69  void sqlite3Mini
20f40 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61  mumFileFormat(Pa
20f50 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
20f60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
20f70 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
20f80 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
20f90 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
20fa0 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
20fb0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
20fc0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
20fd0 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
20fe0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
20ff0 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
21000 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 4b 65 79  lite3*,int);.Key
21010 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64  Info *sqlite3Ind
21020 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20  exKeyinfo(Parse 
21030 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74  *, Index *);.int
21040 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
21050 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
21060 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
21070 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20   int, void *, . 
21080 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
21090 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
210a0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
210b0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
210c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
210d0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
210e0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
210f0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
21100 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
21110 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
21120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
21130 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
21140 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21150 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
21160 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
21170 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
21180 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
21190 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
211a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
211b0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
211c0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
211d0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
211e0 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53 70   sqlite3AppendSp
211f0 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  ace(StrAccum*,in
21200 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
21210 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
21220 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
21230 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
21240 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
21250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
21260 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
21270 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
21280 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21290 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
212a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
212b0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
212c0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
212d0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
212e0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
212f0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
21300 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
21310 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
21320 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
21330 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21340 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
21350 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
21360 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
21370 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
21380 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
21390 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
213a0 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
213b0 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
213c0 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
213d0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
213e0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
213f0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  d*);.#endif../*.
21400 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
21410 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
21420 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
21430 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
21440 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
21450 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f  (*)(size_t));.vo
21460 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
21470 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
21480 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
21490 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
214a0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
214b0 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
214c0 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
214d0 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
214e0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
214f0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
21500 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
21510 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
21520 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
21530 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21540 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
21550 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
21560 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
21570 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
21580 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21590 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
215a0 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
215b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
215c0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
215d0 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
215e0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
215f0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
21600 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
21610 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
21620 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
21630 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
21640 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21650 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
21660 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
21670 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
21680 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
21690 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
216a0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
216b0 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
216c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
216d0 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
216e0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
216f0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
21700 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
21710 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
21720 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
21730 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
21740 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
21750 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
21760 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
21770 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
21780 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
21790 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
217a0 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
217b0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
217c0 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
217d0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
217e0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
217f0 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
21800 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
21810 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
21820 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
21830 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
21840 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21850 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
21860 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
21870 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
21880 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
21890 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
218a0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
218b0 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
218c0 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
218d0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
218e0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
218f0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
21900 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
21910 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
21920 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
21930 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
21940 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
21950 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
21960 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
21970 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
21980 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
21990 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
219a0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
219b0 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
219c0 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
219d0 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
219e0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
219f0 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
21a00 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
21a10 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
21a20 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
21a30 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
21a40 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
21a50 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
21a60 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
21a70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
21a80 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
21a90 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
21aa0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
21ab0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21ac0 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
21ad0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
21ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
21af0 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
21b00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
21b10 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
21b20 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
21b30 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
21b40 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
21b50 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
21b60 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
21b70 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
21b80 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
21b90 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
21ba0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
21bb0 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
21bc0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
21bd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
21be0 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
21bf0 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
21c00 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
21c10 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
21c20 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
21c30 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
21c40 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
21c50 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
21c60 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
21c70 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
21c80 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20  3_value**);.int 
21c90 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
21ca0 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
21cb0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
21cc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
21cd0 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
21ce0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
21cf0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
21d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
21d10 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
21d20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
21d30 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
21d40 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
21d50 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
21d60 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
21d70 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
21d80 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
21d90 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
21da0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
21db0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
21dc0 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
21dd0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
21de0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
21df0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21e00 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
21e10 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
21e20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
21e30 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
21e40 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
21e50 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
21e60 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
21e70 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
21e80 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
21e90 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
21ea0 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
21eb0 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
21ec0 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
21ed0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
21ee0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
21ef0 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
21f00 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
21f10 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
21f20 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
21f30 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
21f40 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
21f50 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
21f60 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
21f70 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
21f80 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
21f90 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
21fa0 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
21fb0 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
21fc0 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
21fd0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
21fe0 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65   .** provided (e
21ff0 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
22000 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
22010 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
22020 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
22030 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
22040 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
22050 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
22060 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22070 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
22080 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
22090 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
220a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
220b0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
220c0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
220d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
220e0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
220f0 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
22100 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
22110 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
22120 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
22130 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
22140 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
22150 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
22160 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
22170 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
22180 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
22190 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
221a0 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
221b0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
221c0 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
221d0 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
221e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
221f0 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
22200 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22210 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
22220 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
22230 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
22240 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 20 30  (a,b)          0
22250 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22260 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
22270 2c 63 2c 64 2c 65 2c 66 29 20 30 0a 23 65 6e 64  ,c,d,e,f) 0.#end
22280 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
22290 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
222a0 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
222b0 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
222c0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
222d0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
222e0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
222f0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
22300 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
22310 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
22320 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
22330 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22340 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
22350 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
22360 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
22370 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
22380 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
22390 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
223a0 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
223b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
223c0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
223d0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
223e0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
223f0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
22400 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
22410 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
22420 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
22430 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
22440 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
22450 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
22460 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
22470 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
22480 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
22490 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
224a0 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
224b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
224c0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
224d0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
224e0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
224f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
22500 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
22510 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
22520 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
22530 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
22540 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22550 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22560 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69  ().#endif..#defi
22570 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
22580 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64  D           1.#d
22590 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
225a0 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32  PH             2
225b0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
225c0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20  X_INDEX_ASC     
225d0 20 20 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    3.#define IN_I
225e0 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20  NDEX_INDEX_DESC 
225f0 20 20 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74       4.int sqlit
22600 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
22610 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22620 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22630 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22640 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22650 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22660 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22670 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22680 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
22690 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
226a0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
226b0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
226c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
226d0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
226e0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
226f0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22700 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
22710 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22720 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22730 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22740 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22750 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22760 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22770 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22780 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22790 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
227a0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
227b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
227c0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
227d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
227e0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
227f0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22800 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22810 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22820 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22830 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22840 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22850 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22860 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22870 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22880 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22890 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
228a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
228b0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
228c0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
228d0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
228e0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
228f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22900 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22910 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22920 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22930 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22940 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22950 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22960 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22970 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22980 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22990 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
229a0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
229b0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
229c0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
229d0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
229e0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
229f0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
22a00 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
22a10 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
22a20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
22a30 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
22a40 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
22a50 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
22a60 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
22a70 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
22a80 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
22a90 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
22aa0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
22ab0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
22ac0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
22ad0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
22ae0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
22af0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
22b00 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
22b10 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
22b20 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
22b30 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
22b40 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
22b50 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
22b60 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
22b70 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
22b80 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22b90 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
22ba0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
22bb0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
22bc0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
22bd0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
22be0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
22bf0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
22c00 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
22c10 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
22c20 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
22c30 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
22c40 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
22c50 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
22c60 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
22c70 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
22c80 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
22c90 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
22ca0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
22cb0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
22cc0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
22cd0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
22ce0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
22cf0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
22d00 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
22d10 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
22d20 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
22d30 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
22d40 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
22d50 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22d60 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
22d70 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
22d80 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
22d90 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
22da0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
22db0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
22dc0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
22dd0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
22de0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
22df0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
22e00 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
22e10 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
22e20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
22e30 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
22e40 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
22e50 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
22e60 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
22e70 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
22e80 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22e90 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
22ea0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
22eb0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
22ec0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
22ed0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
22ee0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
22ef0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
22f00 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
22f10 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
22f20 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
22f30 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
22f40 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
22f50 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
22f60 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
22f70 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
22f80 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
22f90 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
22fa0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
22fb0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
22fc0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
22fd0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
22fe0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
22ff0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
23000 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
23010 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
23020 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
23030 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
23040 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
23050 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
23060 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
23070 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
23080 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
23090 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
230a0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
230b0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
230c0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
230d0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
230e0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
230f0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
23100 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
23110 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23120 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23130 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23140 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23150 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
23160 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
23170 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
23180 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
23190 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
231a0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
231b0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
231c0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
231d0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
231e0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
231f0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
23200 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23210 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23220 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23230 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23240 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23250 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
23260 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
23270 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
23280 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
23290 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
232a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
232b0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
232c0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
232d0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
232e0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
232f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23300 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23310 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23320 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23330 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23340 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23350 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23360 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23370 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
23380 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
23390 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
233a0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
233b0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
233c0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
233d0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
233e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
233f0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23400 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23410 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23420 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23430 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23440 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23450 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23460 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23470 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23480 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.