/ Hex Artifact Content
Login

Artifact 600a1da8ca71c919a1a270146b052a66a128533a:


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 31 36   column */.  u16
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 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  * Function argum
11c50 65 6e 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70  ents or in "<exp
11c60 72 3e 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73  r> IN (<expr-lis
11c70 74 29 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  t)" */.    Selec
11c80 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
11c90 2f 2a 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d  /* Used for sub-
11ca0 73 65 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78  selects and "<ex
11cb0 70 72 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e  pr> IN (<select>
11cc0 29 22 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  )" */.  } x;..  
11cd0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
11ce0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
11cf0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
11d00 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
11d10 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
11d20 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
11d30 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
11d40 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
11d50 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
11d60 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
11d70 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
11d80 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
11d90 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
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 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
11de0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
11df0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
11e00 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
11e10 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
11e20 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
11e30 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
11e40 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
11e50 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
11e60 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
11e70 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
11e80 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
11e90 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11eb0 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
11ec0 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
11ef0 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
11f00 2d 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61  -> old */.  ynVa
11f10 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
11f20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
11f30 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
11f40 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
11f70 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
11f80 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
11f90 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
11fa0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
11fb0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
11fc0 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
11fd0 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
11fe0 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
11ff0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
12000 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
12010 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
12020 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
12030 20 20 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20    u8 flags2;    
12040 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f           /* Seco
12050 6e 64 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e  nd set of flags.
12060 20 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75    EP2_... */.  u
12070 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
12080 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
12090 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
120a0 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
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 43           ** TK_C
120d0 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
120e0 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
120f0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12110 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
12120 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
12130 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
12140 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
12150 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
12160 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
12170 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
12180 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
12190 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
121a0 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
121b0 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
121c0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
121d0 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
121e0 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
121f0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
12200 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12210 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30   EP_FromJoin   0
12220 78 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e  x0001  /* Origin
12230 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
12240 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
12250 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
12260 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78  EP_Agg        0x
12270 30 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0002  /* Contain
12280 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
12290 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
122a0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
122b0 52 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30  Resolved   0x000
122c0 34 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  4  /* IDs have b
122d0 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
122e0 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
122f0 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
12300 20 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72   0x0008  /* Expr
12310 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
12320 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
12330 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
12340 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30  _Distinct   0x00
12350 31 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  10  /* Aggregate
12360 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
12370 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
12380 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
12390 72 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20  rSelect  0x0020 
123a0 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
123b0 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
123c0 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
123d0 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
123e0 20 30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65   0x0040  /* toke
123f0 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
12400 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
12410 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
12420 75 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20  unc  0x0080  /* 
12430 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
12440 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
12450 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
12460 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
12470 65 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20  e    0x0100  /* 
12480 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
12490 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72  TK_COLLATE opear
124a0 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
124b0 50 5f 46 69 78 65 64 44 65 73 74 20 20 30 78 30  P_FixedDest  0x0
124c0 32 30 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e  200  /* Result n
124d0 65 65 64 65 64 20 69 6e 20 61 20 73 70 65 63 69  eeded in a speci
124e0 66 69 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  fic register */.
124f0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
12500 6c 75 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a  lue   0x0400  /*
12510 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
12520 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
12530 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
12540 45 50 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78  EP_xIsSelect  0x
12550 30 38 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65  0800  /* x.pSele
12560 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
12570 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
12580 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
12590 5f 48 69 6e 74 20 20 20 20 20 20 20 30 78 31 30  _Hint       0x10
125a0 30 30 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20  00  /* Not used 
125b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
125c0 64 75 63 65 64 20 20 20 20 30 78 32 30 30 30 20  duced    0x2000 
125d0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
125e0 69 73 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  is EXPR_REDUCEDS
125f0 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
12600 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
12610 65 6e 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20  enOnly  0x4000  
12620 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69  /* Expr struct i
12630 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  s EXPR_TOKENONLY
12640 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
12650 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
12660 61 74 69 63 20 20 20 20 20 30 78 38 30 30 30 20  atic     0x8000 
12670 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
12680 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
12690 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
126a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
126b0 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
126c0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
126d0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
126e0 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  2 field..*/.#def
126f0 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64  ine EP2_Malloced
12700 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f  Token  0x0001  /
12710 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
12720 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
12730 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
12740 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
12750 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43      0x0002  /* C
12760 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
12770 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
12780 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65  /../*.** The pse
12790 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69  udo-routine sqli
127a0 74 65 33 45 78 70 72 53 65 74 49 72 72 65 64 75  te3ExprSetIrredu
127b0 63 69 62 6c 65 20 73 65 74 73 20 74 68 65 20 45  cible sets the E
127c0 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a  P2_Irreducible.*
127d0 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70  * flag on an exp
127e0 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72  ression structur
127f0 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69 73  e.  This flag is
12800 20 75 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f   used for VV&A o
12810 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75  nly.  The.** rou
12820 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tine is implemen
12830 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74  ted as a macro t
12840 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77  hat only works w
12850 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67  hen in debugging
12860 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20   mode,.** so as 
12870 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72  not to burden pr
12880 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a  oduction code..*
12890 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
128a0 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
128b0 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
128c0 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73  e(X)  (X)->flags
128d0 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63  2 |= EP2_Irreduc
128e0 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66  ible.#else.# def
128f0 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
12900 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66  ucible(X).#endif
12910 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ../*.** These ma
12920 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64  cros can be used
12930 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f   to test, set, o
12940 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20  r clear bits in 
12950 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61  the .** Expr.fla
12960 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
12970 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70  fine ExprHasProp
12980 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28  erty(E,P)     ((
12990 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
129a0 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
129b0 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  prHasAnyProperty
129c0 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
129d0 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
129e0 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70  fine ExprSetProp
129f0 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45  erty(E,P)     (E
12a00 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  )->flags|=(P).#d
12a10 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50  efine ExprClearP
12a20 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28  roperty(E,P)   (
12a30 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  E)->flags&=~(P).
12a40 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
12a50 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
12a60 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
12a70 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
12a80 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
12a90 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
12aa0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
12ab0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
12ac0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
12ad0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
12ae0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
12af0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
12b00 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
12b10 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
12b20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
12b30 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
12b40 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
12b50 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
12b60 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
12b70 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
12b80 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
12b90 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
12ba0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
12bb0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
12bc0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
12bd0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
12be0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
12bf0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
12c00 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
12c10 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
12c20 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
12c30 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
12c40 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
12c50 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
12c60 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
12c70 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
12c80 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
12c90 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
12ca0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
12cb0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
12cc0 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
12cd0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
12ce0 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
12cf0 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
12d00 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
12d10 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
12d20 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
12d30 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
12d40 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
12d50 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
12d60 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
12d70 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
12d80 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
12d90 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
12da0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
12db0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
12dc0 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
12dd0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
12de0 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
12df0 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
12e00 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
12e10 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
12e20 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
12e30 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
12e40 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
12e50 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
12e60 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
12e70 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
12e80 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
12e90 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
12ea0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
12eb0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
12ec0 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
12ed0 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
12ee0 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
12ef0 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
12f00 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
12f10 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
12f20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
12f30 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
12f40 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
12f50 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
12f60 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
12f70 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
12f80 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
12f90 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
12fa0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
12fb0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
12fc0 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
12fd0 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
12fe0 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
12ff0 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
13000 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
13010 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
13020 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
13030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13040 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
13050 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
13060 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73   */.  int iECurs
13070 6f 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  or;          /* 
13080 56 44 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f  VDBE Cursor asso
13090 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
130a0 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73   ExprList */.  s
130b0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
130c0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
130d0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
130e0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
130f0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
13100 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
13110 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
13120 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
13130 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
13140 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
13150 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
13160 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
13170 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
13180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
13190 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
131a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
131b0 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
131c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
131d0 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
131e0 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
131f0 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
13200 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
13210 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
13220 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
13230 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
13240 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
13250 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
13260 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
13270 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36  OLUMN */.    u16
13280 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20   iOrderByCol;   
13290 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
132a0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
132b0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
132c0 74 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c  t */.    u16 iAl
132d0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
132e0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50   /* Index into P
132f0 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f  arse.aAlias[] fo
13300 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  r zName */.  } *
13310 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
13320 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
13330 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
13340 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
13350 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
13360 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
13370 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13380 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
13390 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
133a0 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
133b0 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
133c0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
133d0 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
133e0 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
133f0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
13400 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
13410 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
13420 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
13430 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
13440 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
13450 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
13460 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
13470 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
13480 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
13490 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
134a0 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
134b0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
134c0 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
134d0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
134e0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
134f0 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
13500 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
13510 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
13520 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
13530 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
13540 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
13550 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
13560 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
13570 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
13580 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
13590 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
135a0 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
135b0 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
135c0 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
135d0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
135e0 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
135f0 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
13600 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
13610 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
13620 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
13630 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
13640 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
13650 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
13660 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
13670 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
13680 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13690 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
136a0 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
136b0 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
136c0 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
136d0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
136e0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
136f0 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
13700 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
13710 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
13720 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
13730 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
13740 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
13750 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
13760 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
13770 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
13780 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
13790 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
137a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
137b0 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
137c0 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
137d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
137e0 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
137f0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
13800 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
13810 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
13820 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
13830 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
13840 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
13850 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
13860 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
13870 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
13880 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
13890 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
138a0 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
138b0 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
138c0 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
138d0 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65  on ix86..*/.type
138e0 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
138f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
13900 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
13910 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
13920 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
13930 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
13940 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
13950 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
13960 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
13970 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
13980 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
13990 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
139a0 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  <<(n))../*.** Th
139b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
139c0 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
139d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
139e0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
139f0 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
13a00 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
13a10 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
13a20 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
13a30 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
13a40 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
13a50 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
13a60 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
13a70 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
13a80 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
13a90 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
13aa0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
13ab0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
13ac0 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
13ad0 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
13ae0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
13af0 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
13b00 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
13b10 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
13b20 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
13b30 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
13b40 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
13b50 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
13b60 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
13b70 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
13b80 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
13b90 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
13ba0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
13bb0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
13bc0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
13bd0 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
13be0 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
13bf0 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
13c00 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
13c10 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
13c20 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
13c30 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
13c40 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
13c50 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
13c60 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
13c70 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
13c80 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
13c90 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
13ca0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
13cb0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
13cc0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
13cd0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
13ce0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
13cf0 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
13d00 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
13d10 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
13d20 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
13d30 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
13d40 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
13d50 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
13d60 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
13d70 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
13d80 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
13d90 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
13da0 73 74 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b 20  st {.  u8 nSrc; 
13db0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13dc0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
13dd0 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
13de0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
13df0 20 75 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20   u8 nAlloc;     
13e00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
13e10 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
13e20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
13e30 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
13e40 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
13e50 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
13e60 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
13e70 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
13e80 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
13e90 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
13ea0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
13eb0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
13ec0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
13ed0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
13ee0 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
13ef0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
13f00 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
13f10 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
13f20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
13f30 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
13f40 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
13f50 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
13f60 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
13f70 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
13f80 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
13f90 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
13fa0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
13fb0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
13fc0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
13fd0 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
13fe0 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
13ff0 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
14000 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
14010 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
14020 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
14030 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
14040 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
14050 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
14060 53 75 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f  Sub */.    u8 jo
14070 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
14080 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
14090 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
140a0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
140b0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
140c0 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
140d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
140e0 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
140f0 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
14100 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
14110 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
14120 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
14130 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
14140 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
14150 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
14160 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
14170 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
14180 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
14190 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
141a0 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
141b0 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
141c0 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
141d0 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
141e0 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
141f0 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
14200 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
14210 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
14220 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
14230 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
14240 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
14250 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
14260 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
14270 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
14280 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
14290 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
142a0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
142b0 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
142c0 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
142d0 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
142e0 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
142f0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  */.    char *zIn
14300 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e  dex;     /* Iden
14310 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
14320 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
14330 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
14340 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
14350 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
14360 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
14370 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66  ng to zIndex, if
14380 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d   any */.  } a[1]
14390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
143a0 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
143b0 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
143c0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
143d0 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
143e0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
143f0 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
14400 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
14410 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
14420 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
14430 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
14440 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
14450 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
14460 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
14470 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
14480 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
14490 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
144a0 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
144b0 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
144c0 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
144d0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
144e0 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
144f0 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
14500 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
14510 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
14520 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
14530 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
14540 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
14550 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
14560 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
14570 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
14580 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
14590 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
145a0 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
145b0 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
145c0 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
145d0 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
145e0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
145f0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
14600 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
14610 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
14620 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
14630 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
14640 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ..*/.#define WHE
14650 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
14660 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
14670 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
14680 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
14690 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
146a0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
146b0 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
146c0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
146d0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
146e0 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
146f0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
14700 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
14710 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
14720 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
14730 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
14740 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
14750 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
14760 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14770 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
14780 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
14790 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
147a0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
147b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
147c0 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20  MIT_OPEN_CLOSE  
147d0 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
147e0 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
147f0 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
14800 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
14810 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32  TABLE      0x002
14820 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
14830 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
14840 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
14850 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
14860 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a  NLY    0x0040 /*
14870 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
14880 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
14890 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  List */.#define 
148a0 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20  WHERE_AND_ONLY  
148b0 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
148c0 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63   Don't use indic
148d0 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20  es for OR terms 
148e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
148f0 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
14900 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64    0x0100 /* pOrd
14910 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
14920 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
14930 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
14940 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32  NCTBY       0x02
14950 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  00 /* pOrderby i
14960 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
14970 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
14980 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
14990 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
149a0 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  400 /* All outpu
149b0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
149c0 73 74 69 6e 63 74 20 2a 2f 0a 0a 2f 2a 20 41 6c  stinct */../* Al
149d0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
149e0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
149f0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
14a00 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ).*/.#define WHE
14a10 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50  RE_DISTINCT_NOOP
14a20 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54        0  /* DIST
14a30 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74  INCT keyword not
14a40 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
14a50 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
14a60 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20  UNIQUE    1  /* 
14a70 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f  No duplicates */
14a80 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
14a90 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20  ISTINCT_ORDERED 
14aa0 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c    2  /* All dupl
14ab0 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63  icates are adjac
14ac0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ent */.#define W
14ad0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
14ae0 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75  ORDERED 3  /* Du
14af0 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61  plicates are sca
14b00 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ttered */../*.**
14b10 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64   A NameContext d
14b20 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74  efines a context
14b30 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73   in which to res
14b40 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63  olve table and c
14b50 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20  olumn.** names. 
14b60 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   The context con
14b70 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20  sists of a list 
14b80 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70  of tables (the p
14b90 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61  SrcList) field a
14ba0 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20  nd.** a list of 
14bb0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
14bc0 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20   (pEList).  The 
14bd0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
14be0 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20   list may.** be 
14bf0 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20  NULL.  The pSrc 
14c00 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
14c10 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
14c20 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a  f a SELECT or.**
14c30 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65   to the table be
14c40 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
14c50 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
14c60 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54  E, or DELETE.  T
14c70 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72  he.** pEList cor
14c80 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
14c90 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
14ca0 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55  SELECT and is NU
14cb0 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  LL for.** other 
14cc0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
14cd0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63  * NameContexts c
14ce0 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57  an be nested.  W
14cf0 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  hen resolving na
14d00 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d  mes, the inner-m
14d10 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  ost .** context 
14d20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
14d30 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
14d40 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
14d50 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
14d60 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
14d70 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
14d80 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
14d90 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
14da0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
14db0 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
14dc0 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
14dd0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
14de0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
14df0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
14e00 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
14e10 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
14e20 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
14e30 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
14e40 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
14e50 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20  is incremented. 
14e60 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
14e70 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
14e80 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
14e90 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
14ea0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
14eb0 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
14ec0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
14ed0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
14ee0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
14ef0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
14f00 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
14f10 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
14f20 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
14f30 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
14f40 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
14f50 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
14f60 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
14f70 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
14f80 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
14f90 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
14fa0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
14fb0 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
14fc0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
14fd0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
14fe0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
14ff0 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
15000 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
15010 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
15020 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
15030 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
15040 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
15050 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
15060 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
15070 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
15080 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
15090 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
150a0 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
150b0 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
150c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
150d0 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
150e0 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
150f0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
15100 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
15110 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15120 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
15130 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
15140 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38  ng names */.  u8
15150 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
15160 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
15170 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
15180 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
15190 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
151a0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
151b0 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
151c0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
151d0 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
151e0 67 67 20 20 30 78 30 31 20 20 20 20 2f 2a 20 41  gg  0x01    /* A
151f0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15200 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
15210 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
15220 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 32  C_HasAgg    0x02
15230 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f      /* One or mo
15240 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
15250 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
15260 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63  define NC_IsChec
15270 6b 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  k   0x04    /* T
15280 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
15290 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
152a0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
152b0 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67  #define NC_InAgg
152c0 46 75 6e 63 20 30 78 30 38 20 20 20 20 2f 2a 20  Func 0x08    /* 
152d0 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e  True if analyzin
152e0 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61  g arguments to a
152f0 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64  n agg func */.#d
15300 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
15310 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72     0x10    /* Tr
15320 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
15330 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
15340 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  WHERE */../*.** 
15350 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15360 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
15370 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
15380 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
15390 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
153a0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
153b0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
153c0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
153d0 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
153e0 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
153f0 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
15400 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
15410 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
15420 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
15430 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
15440 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
15450 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
15460 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
15470 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
15480 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
15490 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
154a0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
154b0 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
154c0 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
154d0 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
154e0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
154f0 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
15500 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
15510 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
15520 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
15530 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
15540 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
15550 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
15560 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
15570 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
15580 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
15590 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
155a0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
155b0 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
155c0 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
155d0 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
155e0 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
155f0 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
15600 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
15610 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
15620 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
15630 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
15640 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
15650 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
15660 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
15670 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
15680 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
15690 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
156a0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
156b0 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
156c0 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
156d0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
156e0 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
156f0 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
15700 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
15710 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
15720 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
15730 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
15740 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
15750 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
15760 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
15770 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
15780 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
15790 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
157a0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
157b0 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
157c0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
157e0 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
157f0 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
15800 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
15810 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
15820 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
15830 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
15840 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
15850 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
15860 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
15870 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
15880 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
15890 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f  s */.  int addrO
158a0 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a  penEphm[3];   /*
158b0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
158c0 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
158d0 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
158e0 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77    u64 nSelectRow
158f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
15900 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
15910 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
15920 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
15930 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
15940 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
15950 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
15960 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
15970 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15980 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
15990 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
159a0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
159b0 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
159c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
159d0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
159e0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
159f0 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
15a00 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
15a10 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
15a20 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
15a30 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
15a40 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
15a50 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
15a60 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
15a70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
15a80 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
15a90 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
15aa0 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  d */.  Select *p
15ab0 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a  Rightmost;    /*
15ac0 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65   Right-most sele
15ad0 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
15ae0 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
15af0 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  t */.  Expr *pLi
15b00 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
15b10 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
15b20 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
15b30 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
15b40 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
15b50 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
15b60 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
15b70 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
15b80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
15b90 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
15ba0 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
15bb0 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
15bc0 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
15bd0 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
15be0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
15bf0 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
15c00 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
15c10 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
15c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
15c30 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
15c40 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
15c50 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
15c60 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
15c70 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
15c80 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
15c90 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
15ca0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
15cb0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
15cc0 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
15cd0 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
15ce0 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
15cf0 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
15d00 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
15d10 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
15d20 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
15d30 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
15d40 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
15d50 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
15d60 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
15d70 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
15d80 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
15d90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
15da0 73 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30  seSorter       0
15db0 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75  x0040  /* Sort u
15dc0 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f  sing a sorter */
15dd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
15de0 65 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30  es          0x00
15df0 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  80  /* Synthesiz
15e00 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
15e10 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
15e20 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20   SF_Materialize 
15e30 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46      0x0100  /* F
15e40 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61  orce materializa
15e50 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f  tion of views */
15e60 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
15e70 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32  edFrom      0x02
15e80 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
15e90 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
15ea0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
15eb0 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
15ec0 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30 20  nvert    0x0400 
15ed0 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
15ee0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
15ef0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a  Subquery() */...
15f00 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
15f10 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61  s of a select ca
15f20 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
15f30 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
15f40 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20  .  The.** "SRT" 
15f50 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
15f60 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65  LECT Result Type
15f70 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  "..*/.#define SR
15f80 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
15f90 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
15fa0 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
15fb0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
15fc0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
15fd0 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
15fe0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
15ff0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
16000 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
16010 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
16020 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
16030 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
16040 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
16050 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
16060 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
16070 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
16080 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
16090 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
160a0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
160b0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
160c0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
160d0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
160e0 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63  eDest)<=SRT_Disc
160f0 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  ard)..#define SR
16100 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35  T_Output       5
16110 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
16120 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
16130 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
16140 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a  m          6  /*
16150 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
16160 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
16170 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
16180 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a  t          7  /*
16190 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
161a0 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
161b0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
161c0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38  T_Table        8
161d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
161e0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
161f0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
16200 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
16210 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20  _EphemTab     9 
16220 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
16230 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
16240 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
16250 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
16260 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20  _Coroutine   10 
16270 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
16280 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
16290 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ult */../*.** An
162a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
162b0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
162c0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
162d0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
162e0 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
162f0 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
16300 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
16310 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
16320 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
16330 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
16340 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
16350 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
16360 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
16370 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
16380 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
16390 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69  T_Set */.  int i
163a0 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20  SDParm;      /* 
163b0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
163c0 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
163d0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
163e0 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
163f0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
16400 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
16410 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
16420 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
16430 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16440 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
16450 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  located */.};../
16460 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65  *.** During code
16470 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73   generation of s
16480 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64  tatements that d
16490 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41  o inserts into A
164a0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a  UTOINCREMENT .**
164b0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
164c0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
164d0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
164e0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
164f0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
16500 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
16510 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
16520 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
16530 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
16540 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
16550 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
16560 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
16570 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
16580 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
16590 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
165a0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77   inserts are dow
165b0 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  n within trigger
165c0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
165d0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
165e0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
165f0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
16600 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
16610 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
16620 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
16630 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
16640 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
16650 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
16660 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
16670 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
16680 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
16690 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
166a0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
166b0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
166c0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
166d0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
166e0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
166f0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
16700 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
16710 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
16720 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
16730 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
16740 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
16750 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
16760 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
16770 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
16780 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
16790 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
167a0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
167b0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
167c0 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
167d0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
167e0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
167f0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
16800 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
16810 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
16820 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
16830 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ch .** trigger t
16840 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
16850 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
16860 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
16870 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
16880 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
16890 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
168a0 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
168b0 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
168c0 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
168d0 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
168e0 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
168f0 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
16900 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
16910 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
16920 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
16930 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
16940 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
16950 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
16960 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
16970 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
16980 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
16990 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
169a0 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
169b0 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
169c0 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
169d0 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
169e0 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
169f0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
16a00 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
16a10 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
16a20 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
16a30 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
16a40 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
16a50 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
16a60 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
16a70 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
16a80 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
16a90 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
16aa0 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
16ab0 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
16ac0 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
16ad0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
16ae0 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65  SERT .** stateme
16af0 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c  nts). Similarly,
16b00 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
16b10 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69  aColmask[1] vari
16b20 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a  able is set to.*
16b30 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e  * a mask of new.
16b40 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62  * columns used b
16b50 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  y the program..*
16b60 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
16b70 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20  Prg {.  Trigger 
16b80 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  *pTrigger;      
16b90 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20  /* Trigger this 
16ba0 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65  program was code
16bb0 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67  d from */.  Trig
16bc0 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
16bd0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
16be0 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
16bf0 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20  gerPrg list */. 
16c00 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
16c10 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
16c20 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
16c30 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
16c40 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
16c50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16c60 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
16c70 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
16c80 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d   u32 aColmask[2]
16c90 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
16ca0 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e  s of old.*, new.
16cb0 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73  * columns access
16cc0 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ed */.};../*.** 
16cd0 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61  The yDbMask data
16ce0 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74  type for the bit
16cf0 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61  mask of all atta
16d00 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
16d10 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
16d20 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
16d30 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f  typedef sqlite3_
16d40 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a  uint64 yDbMask;.
16d50 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
16d60 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
16d70 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Mask;.#endif../*
16d80 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65  .** An SQL parse
16d90 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f  r context.  A co
16da0 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  py of this struc
16db0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74  ture is passed t
16dc0 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61  hrough.** the pa
16dd0 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e  rser and down in
16de0 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65  to all the parse
16df0 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65  r action routine
16e00 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
16e10 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66  carry around inf
16e20 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
16e30 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65   global to the e
16e40 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a  ntire parse..**.
16e50 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65  ** The structure
16e60 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
16e70 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65   two parts.  Whe
16e80 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  n the parser and
16e90 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74   code.** generat
16ea0 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65  e call themselve
16eb0 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74  s recursively, t
16ec0 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66  he first part of
16ed0 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a   the structure.*
16ee0 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75  * is constant bu
16ef0 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  t the second par
16f00 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68  t is reset at th
16f10 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20  e beginning and 
16f20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72  end of.** each r
16f30 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ecursion..**.** 
16f40 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61  The nTableLock a
16f50 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61  nd aTableLock va
16f60 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
16f70 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61   used if the sha
16f80 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65  red-cache .** fe
16f90 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
16fa0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
16fb0 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
16fc0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
16fd0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
16fe0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
16ff0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
17000 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
17010 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
17020 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
17030 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
17040 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
17050 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
17060 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
17070 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
17080 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
17090 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
170a0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
170b0 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
170c0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
170d0 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
170e0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
170f0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
17100 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
17110 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
17120 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
17130 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
17140 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
17150 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
17160 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
17170 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
17180 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
17190 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
171a0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
171b0 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
171c0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
171d0 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
171e0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
171f0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
17200 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
17210 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
17220 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
17230 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
17240 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
17250 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
17260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
17270 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
17280 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
17290 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e   */.  u8 nTempIn
172a0 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Use;       /* Nu
172b0 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67  mber of aTempReg
172c0 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65  [] currently che
172d0 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38  cked out */.  u8
172e0 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   nColCache;     
172f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17300 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43  entries in aColC
17310 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  ache[] */.  u8 i
17320 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
17330 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69   /* Next entry i
17340 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f  n aColCache[] to
17350 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38   replace */.  u8
17360 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
17370 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
17380 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
17390 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
173a0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
173b0 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
173c0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
173d0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
173e0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
173f0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
17400 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
17410 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
17420 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
17430 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
17440 29 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  ) */.  int aTemp
17450 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
17460 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
17470 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
17480 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
17490 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
174a0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
174b0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
174c0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
174d0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
174e0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
174f0 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
17500 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
17510 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
17520 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17530 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
17540 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
17550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17560 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
17570 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
17580 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
17590 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
175a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
175b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
175c0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
175d0 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
175e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
175f0 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
17600 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
17610 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
17620 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
17630 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
17640 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b   far */.  int ck
17650 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
17660 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
17670 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
17680 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
17690 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49   */.  int iPartI
176a0 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61  dxTab;     /* Ta
176b0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
176c0 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69  g to a partial i
176d0 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ndex */.  int iC
176e0 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
176f0 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
17700 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
17710 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
17720 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
17730 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
17740 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
17750 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
17760 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
17770 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  es */.  struct y
17780 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
17790 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
177a0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
177b0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
177c0 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
177d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
177e0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
177f0 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
17800 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
17810 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
17820 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
17830 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
17840 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
17850 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
17860 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
17870 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
17880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
17890 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
178a0 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
178b0 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
178c0 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
178d0 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
178e0 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
178f0 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
17900 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
17910 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
17920 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
17930 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
17940 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
17950 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  try */.  yDbMask
17960 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
17970 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
17980 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
17990 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
179a0 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
179b0 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
179c0 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
179d0 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
179e0 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47  */.  int cookieG
179f0 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  oto;      /* Add
17a00 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20  ress of OP_Goto 
17a10 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69  to cookie verifi
17a20 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f  er subroutine */
17a30 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
17a40 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
17a50 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
17a60 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
17a70 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
17a80 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
17a90 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17aa0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
17ab0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
17ac0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
17ad0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
17ae0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
17af0 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
17b00 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
17b10 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
17b20 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
17b30 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
17b40 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
17b50 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
17b60 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
17b70 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
17b80 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
17b90 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
17ba0 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23  eing parsed */.#
17bb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17bc0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
17bd0 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
17be0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
17bf0 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
17c00 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
17c10 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
17c20 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
17c30 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
17c40 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
17c50 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
17c60 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
17c70 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
17c80 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
17c90 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
17ca0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
17cb0 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
17cc0 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
17cd0 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
17ce0 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
17cf0 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
17d00 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
17d10 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
17d20 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
17d30 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
17d40 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
17d50 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
17d60 72 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  r */.  u32 nQuer
17d70 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
17d80 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
17d90 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
17da0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
17db0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
17dc0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
17dd0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
17de0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
17df0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
17e00 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
17e10 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
17e20 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
17e30 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
17e40 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
17e50 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
17e60 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
17e70 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
17e80 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
17e90 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
17ea0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
17eb0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
17ec0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
17ed0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
17ee0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
17ef0 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   /* Above is con
17f00 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
17f10 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
17f20 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
17f30 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
17f40 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a  each recursion *
17f50 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17f70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
17f80 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
17f90 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
17fa0 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
17fd0 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
17fe0 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
17ff0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
18000 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
18010 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
18020 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
18030 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
18040 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18050 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
18060 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
18070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
18080 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
18090 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
180a0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
180b0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
180c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
180d0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
180e0 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
180f0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
18100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18110 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
18120 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18130 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
18140 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
18150 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
18160 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
18170 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
18180 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
18190 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
181a0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
181b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
181c0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
181d0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
181e0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
181f0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
18200 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
18210 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
18220 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
18230 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
18240 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
18250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
18260 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
18270 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
18280 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
18290 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
182a0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
182b0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
182c0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 69  repare()) */.  i
182d0 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20 20 20  nt *aAlias;     
182e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
182f0 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c  ster used to hol
18300 64 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  d aliased result
18310 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
18320 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
18330 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
18340 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
18350 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
18360 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
18370 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
18380 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
18390 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
183a0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
183b0 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
183c0 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
183d0 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
183e0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
183f0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
18400 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18410 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
18420 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
18430 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
18440 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
18450 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
18460 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
18470 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
18480 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
18490 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
184a0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
184b0 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
184c0 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
184d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
184e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
184f0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
18500 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
18510 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
18520 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
18530 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
18540 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
18550 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
18560 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
18570 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
18580 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
18590 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
185a0 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
185b0 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
185c0 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
185d0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
185e0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
185f0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
18600 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
18610 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  s */.};../*.** R
18620 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
18630 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
18640 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
18650 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
18660 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
18670 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
18680 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
18690 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
186a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
186b0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
186c0 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
186d0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
186e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
186f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
18700 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
18710 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
18720 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
18730 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
18740 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
18750 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
18760 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
18770 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
18780 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
18790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
187a0 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
187b0 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
187c0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
187d0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
187e0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
187f0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
18800 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
18810 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
18820 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
18830 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
18840 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
18850 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
18860 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
18870 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
18880 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
18890 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
188a0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
188b0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
188c0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
188d0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
188e0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
188f0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
18900 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
18910 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
18920 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18930 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
18940 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
18950 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
18960 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
18970 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
18980 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
18990 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
189a0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
189b0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
189c0 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
189d0 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
189e0 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
189f0 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
18a00 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  P_Column */.#def
18a10 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
18a20 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
18a30 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
18a40 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
18a50 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
18a60 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
18a70 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
18a80 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
18a90 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
18aa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18ab0 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
18ac0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
18ad0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
18ae0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
18af0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18b00 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
18b10 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
18b20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
18b30 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
18b40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18b50 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
18b60 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
18b70 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
18b80 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
18b90 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
18ba0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
18bb0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
18bc0 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
18bd0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
18be0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
18bf0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
18c00 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
18c10 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
18c20 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
18c30 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
18c40 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
18c50 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
18c60 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
18c70 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
18c80 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
18c90 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
18ca0 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
18cb0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
18cc0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
18cd0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
18ce0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
18cf0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
18d00 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
18d10 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
18d20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
18d30 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
18d40 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
18d50 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
18d60 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
18d70 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
18d80 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
18d90 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
18da0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
18db0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
18dc0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
18dd0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
18de0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
18df0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
18e00 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
18e10 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
18e20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
18e30 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
18e40 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
18e50 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
18e60 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
18e70 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
18e80 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
18e90 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
18ec0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
18ed0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
18ee0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
18ef0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
18f00 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18f20 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
18f30 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
18f40 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
18f50 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18f70 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
18f80 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
18f90 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
18fa0 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
18fb0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
18fc0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
18fd0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
18fe0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
18ff0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
19000 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
19010 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
19020 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
19030 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
19060 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
19070 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
19080 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
19090 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
190a0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
190b0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
190c0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
190d0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
190e0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
190f0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
19100 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
19110 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
19120 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
19130 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
19140 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
19150 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
19160 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
19170 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
19180 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
19190 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
191a0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
191b0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
191c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
191d0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
191e0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
191f0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
19200 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
19210 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
19220 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
19230 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
19240 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
19250 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
19260 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
19270 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
19280 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
19290 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
192a0 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
192b0 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
192c0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
192d0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
192e0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
192f0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
19300 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
19310 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
19320 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
19330 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
19340 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
19350 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
19360 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
19370 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
19380 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
19390 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
193a0 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
193b0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
193c0 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
193d0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
193e0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
193f0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
19400 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
19410 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
19420 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
19430 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
19440 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
19450 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
19460 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
19470 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
19480 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
19490 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
194a0 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
194b0 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
194c0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
194d0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
194e0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
194f0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
19500 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
19510 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
19520 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
19530 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
19540 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
19550 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
19560 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
19570 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
19580 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
19590 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
195a0 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
195b0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
195c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
195d0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
195e0 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
195f0 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
19600 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
19610 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
19620 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
19630 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
19640 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
19650 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
19660 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
19670 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
19680 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
19690 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
196a0 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
196b0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
196c0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
196d0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
196e0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
196f0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
19700 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
19710 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
19720 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
19730 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
19740 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
19750 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
19760 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
19770 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
19780 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
19790 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
197a0 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
197b0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
197c0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
197d0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
197e0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
197f0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
19800 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
19810 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
19820 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
19830 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
19840 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
19850 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
19860 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
19870 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
19880 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
19890 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
198a0 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
198b0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
198c0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
198d0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
198e0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
198f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
19900 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
19910 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
19920 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
19930 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
19940 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
19950 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19970 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
19980 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
19990 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
199a0 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
199b0 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
199c0 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
199d0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
199e0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
199f0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
19a00 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
19a10 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
19a20 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
19a30 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
19a40 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
19a50 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
19a60 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
19a70 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
19a80 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
19a90 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
19aa0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
19ab0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
19ac0 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
19ad0 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
19ae0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
19af0 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
19b00 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
19b10 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
19b20 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
19b30 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
19b40 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
19b50 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
19b60 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
19b70 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
19b80 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
19b90 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
19ba0 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 20  se for UPDATE.  
19bb0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66 6f  VALUES clause fo
19bc0 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64  r INSERT */.  Id
19bd0 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
19be0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
19bf0 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
19c00 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
19c10 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
19c20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
19c30 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
19c40 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
19c50 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
19c60 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
19c70 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
19c80 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
19c90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
19ca0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
19cb0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
19cc0 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
19cd0 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
19ce0 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
19cf0 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
19d00 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
19d10 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
19d20 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
19d30 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
19d40 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
19d50 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
19d60 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
19d70 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
19d80 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
19d90 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
19da0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
19db0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
19dc0 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
19dd0 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
19de0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
19df0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
19e00 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
19e10 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
19e20 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
19e30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
19e40 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
19e50 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
19e60 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
19e70 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
19e80 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
19e90 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
19ea0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
19eb0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
19ec0 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
19ed0 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
19ee0 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
19ef0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
19f00 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
19f10 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
19f20 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
19f30 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
19f40 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
19f50 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
19f60 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
19f70 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
19f80 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
19f90 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
19fa0 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
19fb0 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
19fc0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
19fd0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
19fe0 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
19ff0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1a000 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a010 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1a020 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1a030 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1a040 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1a050 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1a060 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1a070 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1a080 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1a090 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1a0a0 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1a0b0 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1a0c0 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1a0d0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1a0e0 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1a0f0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1a100 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1a110 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1a120 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1a130 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1a140 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1a150 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1a160 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1a170 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1a180 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1a190 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1a1a0 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1a1b0 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1a1c0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1a1d0 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1a1e0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1a1f0 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1a200 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1a210 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1a220 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1a230 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1a240 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1a250 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1a260 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1a270 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1a280 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1a290 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1a2a0 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1a2b0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1a2c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1a2d0 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1a2e0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1a2f0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1a300 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1a310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1a320 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1a330 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1a340 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1a350 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1a360 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1a370 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1a380 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1a390 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1a3a0 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1a3b0 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1a3c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1a3d0 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1a3e0 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1a3f0 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1a400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a410 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1a420 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1a430 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1a460 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1a470 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1a480 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1a490 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a4a0 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1a4b0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1a4c0 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1a4f0 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1a500 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1a510 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a530 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1a540 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1a550 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1a560 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1a570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1a580 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1a590 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  ngth */.  int sz
1a5a0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1a5c0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1a5d0 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
1a5e0 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
1a5f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a600 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1a610 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1a620 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74  count */.  sqlit
1a630 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
1a640 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a650 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
1a660 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
1a670 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1a680 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1a690 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
1a6a0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
1a6b0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1a6c0 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
1a6d0 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
1a6e0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
1a6f0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
1a700 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
1a710 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1a720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
1a730 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
1a740 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a770 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
1a780 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7a0 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
1a7b0 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
1a7c0 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
1a7d0 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
1a7e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
1a7f0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
1a800 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
1a810 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
1a820 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1a830 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
1a840 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
1a850 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
1a880 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1a890 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a8b0 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
1a8c0 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
1a8d0 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1a900 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
1a910 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
1a940 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
1a950 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1a980 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
1a990 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
1a9a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a9b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1a9c0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
1a9d0 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1a9e0 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aa00 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
1aa10 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
1aa20 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
1aa30 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
1aa40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
1aa50 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
1aa60 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
1aa70 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
1aa80 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
1aa90 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
1aaa0 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
1aab0 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
1aac0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
1aad0 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
1aae0 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
1aaf0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ab00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ab10 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
1ab20 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
1ab30 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
1ab40 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
1ab50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ab60 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
1ab70 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
1ab80 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
1ab90 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
1aba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1abb0 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
1abc0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
1abd0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
1abe0 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
1abf0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1ac00 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1ac10 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ac20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
1ac30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac40 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1ac50 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1ac60 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  lized */.  sqlit
1ac70 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
1ac80 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
1ac90 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
1aca0 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1acb0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  () */.  int nRef
1acc0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1acd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ace0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1acf0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1ad00 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
1ad10 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
1ad20 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
1ad30 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
1ad40 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1ad70 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
1ad80 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63  () */.  int bLoc
1ad90 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1ada0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1adb0 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1adc0 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  ime() calls */.#
1add0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1ade0 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
1adf0 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
1ae00 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
1ae10 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
1ae20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
1ae30 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  ;.#endif.};../*.
1ae40 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1ae50 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1ae60 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1ae70 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1ae80 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1ae90 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1aea0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1aeb0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1aec0 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1aed0 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1aee0 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1aef0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1af00 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1af10 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72  SELECTs */.  Par
1af20 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
1af50 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
1af60 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1af90 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
1afa0 73 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65 63  s */.  u8 bSelec
1afb0 74 44 65 70 74 68 46 69 72 73 74 3b 20 20 20 20  tDepthFirst;    
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69 65   /* Do subquerie
1afe0 73 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69  s first */.  uni
1aff0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1b020 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1b030 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1b040 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1b070 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1b080 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
1b0b0 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  er value */.    
1b0c0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1b0d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1b0e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1b0f0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1b100 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1b110 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1b120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1b130 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1b140 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1b150 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1b160 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1b170 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1b180 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1b190 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1b1a0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1b1b0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1b1c0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1b1d0 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1b1e0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1b1f0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1b200 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1b210 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1b220 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1b230 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1b240 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1b250 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1b260 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1b270 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1b280 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1b290 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1b2a0 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1b2b0 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1b2c0 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1b2d0 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1b2e0 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1b2f0 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1b300 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1b310 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1b320 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1b330 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1b340 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1b350 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1b360 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
1b370 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
1b380 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1b390 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
1b3a0 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
1b3b0 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
1b3c0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
1b3d0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
1b3e0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
1b3f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
1b400 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
1b430 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1b460 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
1b470 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
1b480 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
1b490 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
1b4e0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
1b4f0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
1b500 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
1b510 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
1b520 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
1b530 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
1b540 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
1b550 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
1b560 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
1b570 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
1b580 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
1b590 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
1b5a0 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
1b5b0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
1b5c0 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
1b5d0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
1b5e0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
1b5f0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
1b600 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
1b610 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
1b620 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
1b630 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
1b640 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
1b650 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1b660 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
1b670 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
1b680 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
1b690 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
1b6a0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1b6b0 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
1b6c0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
1b6d0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1b6e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
1b6f0 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
1b700 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
1b710 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a  _LINE__).../*.**
1b720 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
1b730 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
1b740 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
1b750 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
1b760 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
1b770 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
1b780 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
1b790 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c  sion we also all
1b7a0 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
1b7b0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
1b7c0 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
1b7d0 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54  alisse for SQLIT
1b7e0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
1b7f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1b800 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1b810 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1b820 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1b830 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1b840 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65  E_ENABLE_FTS3.#e
1b850 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1b860 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
1b870 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
1b880 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
1b890 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
1b8a0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
1b8b0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
1b8c0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
1b8d0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
1b8e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1b8f0 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
1b900 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
1b910 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
1b920 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
1b930 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
1b940 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
1b950 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
1b960 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1b970 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
1b980 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
1b990 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
1b9a0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
1b9b0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
1b9c0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
1b9d0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
1b9e0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
1b9f0 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
1ba00 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
1ba10 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
1ba20 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
1ba30 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
1ba40 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
1ba50 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
1ba60 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
1ba70 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1ba80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1ba90 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
1baa0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1bab0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1bac0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bad0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
1bae0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1baf0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
1bb00 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bb10 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bb20 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
1bb30 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
1bb40 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1bb50 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bb60 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
1bb70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bb80 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
1bb90 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bba0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bbb0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
1bbc0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
1bbd0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
1bbe0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1bbf0 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
1bc00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bc10 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
1bc20 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
1bc30 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
1bc40 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
1bc50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
1bc60 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
1bc70 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
1bc80 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1bc90 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
1bca0 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
1bcb0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1bcc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1bcd0 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
1bce0 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
1bcf0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1bd00 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
1bd10 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
1bd20 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1bd30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bd40 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
1bd50 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1bd60 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1bd70 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1bd80 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
1bd90 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1bda0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1bdb0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
1bdc0 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
1bdd0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
1bde0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
1bdf0 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
1be00 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69  totypes.*/.#defi
1be10 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  ne sqlite3StrICm
1be20 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  p sqlite3_stricm
1be30 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  p.int sqlite3Str
1be40 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
1be50 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  *);.#define sqli
1be60 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69  te3StrNICmp sqli
1be70 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e  te3_strnicmp..in
1be80 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49  t sqlite3MallocI
1be90 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  nit(void);.void 
1bea0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64  sqlite3MallocEnd
1beb0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71  (void);.void *sq
1bec0 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29  lite3Malloc(int)
1bed0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
1bee0 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a  allocZero(int);.
1bef0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1bf00 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65  allocZero(sqlite
1bf10 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  3*, int);.void *
1bf20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
1bf30 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  aw(sqlite3*, int
1bf40 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1bf50 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
1bf60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
1bf70 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
1bf80 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
1bf90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1bfa0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bfb0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69  Realloc(void*, i
1bfc0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1bfd0 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
1bfe0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
1bff0 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  d *, int);.void 
1c000 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1c010 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
1c020 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  d *, int);.void 
1c030 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
1c040 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
1c050 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1c060 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
1c070 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
1c080 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
1c090 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
1c0a0 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c  lite3ScratchMall
1c0b0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1c0c0 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
1c0d0 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73  (void*);.void *s
1c0e0 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63  qlite3PageMalloc
1c0f0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1c100 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64  te3PageFree(void
1c110 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1c120 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f  MemSetDefault(vo
1c130 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1c140 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
1c150 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
1c160 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
1c170 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  ));.int sqlite3H
1c180 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
1c190 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
1c1a0 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
1c1b0 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
1c1c0 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
1c1d0 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
1c1e0 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
1c1f0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
1c200 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
1c210 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
1c220 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
1c230 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
1c240 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
1c250 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
1c260 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
1c270 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
1c280 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
1c290 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
1c2a0 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
1c2b0 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
1c2c0 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
1c2d0 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
1c2e0 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
1c2f0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
1c300 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1c310 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
1c320 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c330 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
1c340 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
1c350 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
1c360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1c370 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
1c380 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66      .#else.# def
1c390 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c3a0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1c3b0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
1c3c0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
1c3d0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1c3e0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
1c3f0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c400 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
1c410 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1c420 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
1c430 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
1c440 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c450 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1c460 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
1c470 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1c480 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1c490 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
1c4a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1c4b0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
1c4c0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1c4d0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1c4e0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
1c4f0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
1c500 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
1c510 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
1c520 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1c530 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
1c540 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
1c550 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
1c560 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
1c570 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
1c580 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1c590 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
1c5a0 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
1c5b0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
1c5c0 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
1c5d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
1c5e0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
1c5f0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
1c600 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
1c610 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1c620 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74  atusAdd(int, int
1c630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c640 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e  tatusSet(int, in
1c650 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  t);..#ifndef SQL
1c660 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
1c670 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
1c680 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
1c690 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1c6a0 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
1c6b0 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  X)  0.#endif..vo
1c6c0 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
1c6d0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e  tf(StrAccum*, in
1c6e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1c6f0 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65  va_list);.#ifnde
1c700 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
1c710 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ACE.void sqlite3
1c720 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1c730 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1c740 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61  ...);.#endif.cha
1c750 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
1c760 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
1c770 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
1c780 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
1c790 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
1c7a0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
1c7b0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
1c7c0 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65  3MAppendf(sqlite
1c7d0 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  3*,char*,const c
1c7e0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64  har*,...);.#if d
1c7f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
1c800 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  ST) || defined(S
1c810 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
1c820 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
1c830 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
1c840 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
1c850 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1c860 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
1c870 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
1c880 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
1c890 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  r*);.#endif../* 
1c8a0 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e  Output formattin
1c8b0 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53  g for SQLITE_TES
1c8c0 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f  TCTRL_EXPLAIN */
1c8d0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1c8e0 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f  ITE_ENABLE_TREE_
1c8f0 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20  EXPLAIN).  void 
1c900 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65  sqlite3ExplainBe
1c910 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  gin(Vdbe*);.  vo
1c920 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1c930 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63  nPrintf(Vdbe*, c
1c940 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1c950 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1c960 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29  ExplainNL(Vdbe*)
1c970 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1c980 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65  ExplainPush(Vdbe
1c990 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1c9a0 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62  e3ExplainPop(Vdb
1c9b0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1c9c0 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1c9d0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1c9e0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65  sqlite3ExplainSe
1c9f0 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65  lect(Vdbe*, Sele
1ca00 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
1ca10 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
1ca20 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  Vdbe*, Expr*);. 
1ca30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1ca40 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62  lainExprList(Vdb
1ca50 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  e*, ExprList*);.
1ca60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71    const char *sq
1ca70 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61  lite3VdbeExplana
1ca80 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c  tion(Vdbe*);.#el
1ca90 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1caa0 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28  te3ExplainBegin(
1cab0 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1cac0 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74  te3ExplainSelect
1cad0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1cae0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1caf0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
1cb00 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1cb10 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65  prList(A,B).# de
1cb20 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1cb30 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64  ainFinish(X).# d
1cb40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
1cb50 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20  eExplanation(X) 
1cb60 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  0.#endif...void 
1cb70 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
1cb80 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
1cb90 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  3*, const char*,
1cba0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
1cbb0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
1cbc0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1cbd0 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
1cbe0 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
1cbf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
1cc00 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
1cc10 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
1cc20 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1cc30 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
1cc40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1cc50 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
1cc60 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
1cc70 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
1cc80 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
1cc90 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1cca0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
1ccb0 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
1ccc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1ccd0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
1cce0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1ccf0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
1cd00 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
1cd10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cd20 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
1cd30 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
1cd40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
1cd50 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
1cd60 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
1cd70 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1cd80 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
1cd90 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1cda0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cdb0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
1cdc0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
1cdd0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
1cde0 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
1cdf0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
1ce00 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
1ce10 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
1ce20 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
1ce30 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
1ce40 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
1ce50 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
1ce60 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1ce70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
1ce80 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
1ce90 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
1cea0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1ceb0 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
1cec0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1ced0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
1cee0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
1cef0 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
1cf00 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
1cf10 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1cf20 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
1cf30 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
1cf40 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1cf50 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
1cf60 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
1cf70 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
1cf80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cf90 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1cfa0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
1cfb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
1cfc0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
1cfd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1cfe0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
1cff0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
1d000 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
1d010 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
1d020 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1d030 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1d040 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
1d050 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
1d060 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
1d070 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
1d080 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
1d090 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
1d0a0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
1d0b0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
1d0c0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d0d0 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
1d0e0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1d0f0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
1d100 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
1d110 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a  lite3*);.Table *
1d120 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
1d130 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
1d140 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
1d150 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
1d160 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
1d170 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d180 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73  3StartTable(Pars
1d190 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1d1a0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
1d1b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d1c0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
1d1d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1d1e0 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
1d1f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1d200 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
1d210 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
1d220 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1d230 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1d240 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
1d250 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
1d260 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1d270 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54  qlite3AddColumnT
1d280 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ype(Parse*,Token
1d290 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d2a0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
1d2b0 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
1d2c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d2d0 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
1d2e0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
1d2f0 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
1d300 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1d310 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a  *,Token*,Select*
1d320 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
1d330 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
1d340 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
1d350 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
1d380 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
1d390 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
1d3a0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
1d3b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1d3c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
1d3d0 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29  odeOnce(Parse *)
1d3e0 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  ;..Bitvec *sqlit
1d3f0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
1d400 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
1d410 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
1d420 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
1d430 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
1d440 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
1d450 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
1d460 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
1d470 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
1d480 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
1d490 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
1d4a0 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
1d4b0 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
1d4c0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1d4d0 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
1d4e0 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20  ,int*);..RowSet 
1d4f0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
1d500 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
1d510 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
1d520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1d530 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
1d540 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d550 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
1d560 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
1d570 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
1d580 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69  st(RowSet*, u8 i
1d590 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74  Batch, i64);.int
1d5a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
1d5b0 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a  xt(RowSet*, i64*
1d5c0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
1d5d0 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65  CreateView(Parse
1d5e0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d5f0 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69  Token*,Select*,i
1d600 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
1d610 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1d620 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
1d630 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1d640 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
1d650 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
1d660 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
1d670 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
1d680 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1d690 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1d6a0 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
1d6b0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
1d6c0 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
1d6d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1d6e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d6f0 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
1d700 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
1d710 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1d720 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1d730 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
1d740 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
1d750 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1d760 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
1d770 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
1d780 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
1d790 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
1d7a0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
1d7b0 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
1d7c0 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
1d7d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1d7e0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1d7f0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1d800 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1d810 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
1d820 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  if.int sqlite3Co
1d830 64 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73  deCoroutine(Pars
1d840 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
1d850 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20  ectDest*);.void 
1d860 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
1d870 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1d880 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63  ExprList*, Selec
1d890 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
1d8a0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d8b0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
1d8c0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
1d8d0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
1d8e0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1d8f0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1d900 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
1d910 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1d920 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
1d930 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
1d940 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1d950 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
1d960 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1d970 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1d980 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1d990 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
1d9a0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1d9b0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1d9c0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1d9d0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1d9e0 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
1d9f0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1da00 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da30 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
1da40 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
1da50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1da60 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
1da70 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1da80 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
1da90 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
1daa0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
1dab0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
1dac0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
1dad0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1dae0 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
1daf0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1db00 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
1db10 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
1db20 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1db30 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
1db40 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
1db50 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1db60 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
1db70 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1db80 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
1db90 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
1dba0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1dbb0 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
1dbc0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
1dbd0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1dbf0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1dc00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1dc10 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
1dc20 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
1dc30 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
1dc40 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
1dc50 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
1dc60 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1dc70 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
1dc80 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
1dc90 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1dca0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1dcc0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
1dcd0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  Expr*,Expr*);.vo
1dce0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
1dcf0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1dd00 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
1dd10 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1dd20 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
1dd30 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1dd40 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
1dd50 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1dd60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dd70 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
1dd80 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
1dd90 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
1dda0 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
1ddb0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
1ddc0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
1ddd0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
1dde0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
1ddf0 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
1de00 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
1de10 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
1de20 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
1de30 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  pr*,Expr*,char*)
1de40 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
1de50 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
1de60 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1de70 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1de80 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
1de90 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1dea0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
1deb0 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f   int);.WhereInfo
1dec0 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
1ded0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
1dee0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1def0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
1df00 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
1df10 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
1df20 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71  reInfo*);.u64 sq
1df30 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
1df40 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
1df50 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1df60 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1df70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1df80 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1df90 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
1dfa0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
1dfb0 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
1dfc0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
1dfd0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
1dfe0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
1dff0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
1e000 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
1e010 73 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  s(WhereInfo*);.i
1e020 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e030 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
1e040 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e050 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
1e060 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e070 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
1e080 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c  able(Vdbe*, Tabl
1e090 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e0a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e0b0 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72  ExprCodeMove(Par
1e0c0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1e0d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e0e0 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
1e0f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1e100 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e110 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
1e120 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
1e130 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1e140 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Pop(Parse*, int)
1e150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e160 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
1e170 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1e180 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e190 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
1e1a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e1b0 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
1e1c0 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
1e1d0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1e1e0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
1e1f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1e200 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e210 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
1e220 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
1e230 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e240 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
1e250 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1e260 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e270 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
1e280 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e2a0 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73  xprCodeConstants
1e2b0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1e2c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e2d0 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
1e2e0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1e2f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1e300 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
1e310 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1e320 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e330 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
1e340 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
1e350 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
1e360 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
1e370 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
1e380 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1e390 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
1e3a0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
1e3b0 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
1e3c0 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
1e3d0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1e3e0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
1e3f0 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
1e400 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
1e410 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
1e420 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
1e430 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
1e440 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1e450 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e460 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e470 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1e480 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
1e490 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1e4a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
1e4b0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
1e4c0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
1e4d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1e4e0 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
1e4f0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1e500 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
1e510 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
1e520 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
1e530 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
1e540 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
1e550 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e560 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
1e570 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1e580 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
1e590 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
1e5a0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
1e5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e5c0 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
1e5d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1e5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e5f0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
1e600 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
1e610 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1e620 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
1e630 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
1e640 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
1e650 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
1e660 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
1e670 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
1e680 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
1e690 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
1e6a0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
1e6b0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
1e6c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
1e6d0 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
1e6e0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1e6f0 50 72 6e 67 52 65 73 65 74 53 74 61 74 65 28 76  PrngResetState(v
1e700 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1e710 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
1e720 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
1e730 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1e740 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
1e750 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e760 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
1e770 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
1e780 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
1e790 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
1e7a0 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
1e7b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1e7c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
1e7d0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
1e7e0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1e7f0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
1e800 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
1e810 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
1e820 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
1e830 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
1e840 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
1e850 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
1e860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
1e870 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
1e880 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
1e890 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e8a0 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
1e8b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e8c0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
1e8d0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
1e8e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
1e8f0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
1e900 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
1e910 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
1e920 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
1e930 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e940 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
1e950 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1e960 69 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e 75  ite3ExprCodeIsNu
1e970 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63 6f  llJump(Vdbe*, co
1e980 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  nst Expr*, int, 
1e990 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e9a0 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
1e9b0 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
1e9c0 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
1e9d0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
1e9e0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
1e9f0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
1ea00 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
1ea10 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1ea20 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72 69  t, int, int, Tri
1ea30 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  gger *, int);.vo
1ea40 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1ea50 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
1ea60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1ea70 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74   int, int*);.int
1ea80 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
1ea90 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
1eaa0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
1eab0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 76  t, int, int*);.v
1eac0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1ead0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1eae0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1eaf0 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1eb30 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1eb40 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1eb50 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1eb60 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1eb70 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1eb80 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1eb90 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1eba0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1ebb0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1ebc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ebd0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1ebe0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1ebf0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1ec00 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1ec10 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1ec20 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1ec30 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1ec40 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1ec50 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1ec60 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45  , char*, int);.E
1ec70 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1ec80 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
1ec90 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
1eca0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1ecb0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
1ecc0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
1ecd0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1ece0 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
1ecf0 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
1ed00 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1ed10 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
1ed20 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
1ed30 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1ed40 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
1ed50 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
1ed60 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
1ed70 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
1ed80 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
1ed90 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
1eda0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
1edb0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1edc0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
1edd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1ede0 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
1edf0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
1ee00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1ee10 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
1ee20 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1ee30 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
1ee40 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
1ee50 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
1ee60 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1ee70 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
1ee80 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1ee90 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
1eea0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1eeb0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
1eec0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
1eed0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1eee0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1eef0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1ef00 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
1ef10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
1ef20 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
1ef30 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
1ef40 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
1ef50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1ef60 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
1ef70 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1ef80 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
1ef90 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
1efa0 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
1efb0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efd0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
1efe0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1eff0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
1f000 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
1f010 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
1f020 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1f030 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
1f040 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1f050 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f060 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
1f070 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
1f080 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
1f090 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
1f0a0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1f0b0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1f0c0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
1f0d0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1f0e0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
1f0f0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
1f100 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
1f110 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
1f120 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
1f130 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1f140 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
1f170 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1f180 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1f190 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
1f1a0 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
1f1b0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
1f1c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
1f1d0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
1f1e0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
1f1f0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
1f200 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
1f210 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1f220 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
1f230 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
1f240 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
1f250 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f260 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
1f270 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
1f280 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f290 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
1f2a0 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
1f2b0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
1f2c0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c             ExprL
1f2f0 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29  ist*,Select*,u8)
1f300 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f310 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
1f320 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
1f330 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
1f340 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
1f350 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f360 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
1f370 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
1f380 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
1f390 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f3a0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
1f3b0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
1f3c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f3d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1f3e0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1f3f0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1f400 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
1f410 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
1f420 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
1f430 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
1f440 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
1f450 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1f460 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
1f470 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
1f480 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
1f490 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64  : (p)).#else.# d
1f4a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1f4b0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
1f4c0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
1f4d0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
1f4e0 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
1f4f0 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
1f500 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
1f510 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
1f520 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1f530 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
1f540 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1f550 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
1f560 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
1f570 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
1f580 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
1f590 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
1f5a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f5b0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
1f5c0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
1f5d0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
1f5e0 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
1f5f0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
1f600 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
1f610 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
1f620 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
1f630 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
1f640 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
1f650 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1f660 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
1f670 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
1f680 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
1f690 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
1f6a0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
1f6b0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
1f6c0 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
1f6d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
1f6e0 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
1f6f0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1f700 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
1f710 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
1f720 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
1f730 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
1f740 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1f750 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
1f760 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
1f770 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
1f780 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
1f790 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
1f7a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
1f7b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
1f7c0 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
1f7d0 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
1f7e0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
1f7f0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
1f800 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
1f810 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
1f820 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1f830 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
1f840 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
1f850 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
1f860 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
1f870 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
1f880 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1f890 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
1f8a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1f8b0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
1f8c0 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
1f8d0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
1f8e0 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
1f8f0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
1f900 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f910 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
1f920 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1f930 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
1f940 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
1f950 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1f960 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
1f970 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
1f980 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
1f990 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
1f9a0 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
1f9b0 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
1f9c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f9d0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
1f9e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f9f0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
1fa00 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
1fa10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1fa20 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
1fa30 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
1fa40 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
1fa50 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
1fa60 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
1fa70 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
1fa80 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
1fa90 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
1faa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
1fab0 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
1fac0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
1fad0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
1fae0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
1faf0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
1fb00 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
1fb10 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
1fb20 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
1fb30 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
1fb40 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f  (const u8**);../
1fb50 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
1fb60 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
1fb70 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
1fb80 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
1fb90 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
1fba0 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
1fbb0 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
1fbc0 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
1fbd0 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
1fbe0 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20  .** file.  Code 
1fbf0 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d  should use the M
1fc00 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77  ACRO forms below
1fc10 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33  , as the Varint3
1fc20 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72  2 versions.** ar
1fc30 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d  e coded to assum
1fc40 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74  e the single byt
1fc50 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64  e case is alread
1fc60 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68  y handled (which
1fc70 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66   .** the MACRO f
1fc80 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e  orm does)..*/.in
1fc90 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
1fca0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
1fcb0 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, u64);.int sql
1fcc0 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
1fcd0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
1fce0 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  u32);.u8 sqlite3
1fcf0 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20  GetVarint(const 
1fd00 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
1fd10 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69   u64 *);.u8 sqli
1fd20 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63  te3GetVarint32(c
1fd30 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1fd40 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e  ar *, u32 *);.in
1fd50 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t sqlite3VarintL
1fd60 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a  en(u64 v);../*.*
1fd70 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  * The header of 
1fd80 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74  a record consist
1fd90 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20  s of a sequence 
1fda0 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
1fdb0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
1fdc0 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  se integers are 
1fdd0 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d  almost always sm
1fde0 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f  all and are enco
1fdf0 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20  ded as a single 
1fe00 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c  byte..** The fol
1fe10 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61  lowing macros ta
1fe20 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69  ke advantage thi
1fe30 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64  s fact to provid
1fe40 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a  e a fast encode.
1fe50 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66  ** and decode of
1fe60 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e   the integers in
1fe70 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72   a record header
1fe80 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20  .  It is faster 
1fe90 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a  for the common.*
1fea0 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  * case where the
1feb0 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69   integer is a si
1fec0 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69  ngle byte.  It i
1fed0 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65  s a little slowe
1fee0 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e  r when the.** in
1fef0 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20  teger is two or 
1ff00 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74  more bytes.  But
1ff10 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66   overall it is f
1ff20 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  aster..**.** The
1ff30 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65   following expre
1ff40 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76  ssions are equiv
1ff50 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  alent:.**.**    
1ff60 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   x = sqlite3GetV
1ff70 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29  arint32( A, &B )
1ff80 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  ;.**     x = sql
1ff90 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28  ite3PutVarint32(
1ffa0 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20   A, B );.**.**  
1ffb0 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74     x = getVarint
1ffc0 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20  32( A, B );.**  
1ffd0 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74     x = putVarint
1ffe0 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a  32( A, B );.**.*
1fff0 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  /.#define getVar
20000 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20  int32(A,B)  \.  
20010 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
20020 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a  x80)?((B)=(u32)*
20030 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65  (A)),1:sqlite3Ge
20040 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75  tVarint32((A),(u
20050 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66  32 *)&(B))).#def
20060 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28  ine putVarint32(
20070 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
20080 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
20090 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67  80)?(*(A)=(unsig
200a0 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a  ned char)(B)),1:
200b0 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61  \.  sqlite3PutVa
200c0 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29  rint32((A),(B)))
200d0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
200e0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
200f0 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
20100 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
20110 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
20120 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20130 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
20140 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
20150 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20160 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74  3TableAffinitySt
20170 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20  r(Vdbe *, Table 
20180 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20190 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
201a0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
201b0 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
201c0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
201d0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
201e0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
201f0 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
20200 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
20210 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
20220 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
20230 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
20240 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
20250 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c  sqlite3Error(sql
20260 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
20270 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
20280 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
20290 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
202a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
202b0 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
202c0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
202d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
202e0 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
202f0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
20300 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
20310 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20320 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
20330 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
20340 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   || \.    define
20350 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f  d(SQLITE_DEBUG_O
20360 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63  S_TRACE).const c
20370 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
20380 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
20390 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
203a0 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
203b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
203c0 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
203d0 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
203e0 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
203f0 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
20400 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
20410 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
20420 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
20430 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
20440 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
20450 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
20460 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
20470 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
20480 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
20490 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
204a0 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
204b0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
204c0 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Expr*, Token*);.
204d0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
204e0 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
204f0 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
20500 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
20510 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
20520 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
20530 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
20540 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
20550 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
20560 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
20570 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
20580 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
20590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
205a0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
205b0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
205c0 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
205d0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
205e0 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
205f0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
20600 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
20610 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
20620 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
20630 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
20640 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
20650 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
20660 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
20670 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
20680 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20690 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
206a0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
206b0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
206c0 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
206d0 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76  z,int);..const v
206e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
206f0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
20700 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
20710 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
20720 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
20730 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
20740 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
20750 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
20760 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
20770 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  u8, .           
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
20790 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
207a0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
207b0 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
207c0 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
207d0 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
207e0 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
207f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
20800 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
20810 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
20820 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
20830 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
20840 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
20850 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
20860 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
20870 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20880 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
20890 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
208a0 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
208b0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
208c0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
208d0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
208e0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
208f0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
20900 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20910 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
20920 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
20930 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
20940 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
20950 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
20960 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
20970 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
20980 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
20990 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
209a0 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
209b0 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
209c0 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
209d0 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
209e0 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
209f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
20a00 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
20a10 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
20a20 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
20a30 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
20a40 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
20a50 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
20a60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20a70 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
20a80 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20a90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20aa0 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
20ab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20ac0 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
20ad0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
20ae0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
20af0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
20b00 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20b10 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
20b20 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
20b30 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
20b40 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20b50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20b60 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
20b70 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
20b80 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
20b90 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
20ba0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
20bb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20bc0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
20bd0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20be0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
20bf0 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
20c00 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
20c10 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20c20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20c30 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
20c40 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
20c50 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
20c60 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
20c70 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
20c80 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
20c90 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
20ca0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
20cb0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
20cc0 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
20cd0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
20ce0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
20cf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
20d00 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
20d10 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
20d20 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
20d30 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
20d40 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
20d50 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
20d60 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
20d70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
20d80 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
20d90 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
20da0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20db0 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
20dc0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
20dd0 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
20de0 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
20df0 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
20e00 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
20e10 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
20e20 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
20e30 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
20e40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
20e50 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
20e60 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
20e70 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
20e80 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
20e90 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
20ea0 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
20eb0 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
20ec0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
20ed0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
20ee0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
20ef0 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
20f00 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
20f10 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
20f20 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
20f30 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
20f40 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
20f50 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
20f60 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
20f70 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
20f80 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
20f90 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
20fa0 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
20fb0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
20fc0 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
20fd0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20fe0 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
20ff0 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
21000 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21010 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
21020 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
21030 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
21040 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
21050 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21060 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
21070 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
21080 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
21090 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
210a0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  oc(sqlite3*,int)
210b0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
210c0 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50  e3IndexKeyinfo(P
210d0 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  arse *, Index *)
210e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  ;.int sqlite3Cre
210f0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
21100 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
21110 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
21120 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
21130 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
21140 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
21150 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
21160 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
21170 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
21180 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
21190 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
211a0 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
211b0 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
211c0 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
211d0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
211e0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
211f0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
21200 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
21210 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
21220 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
21230 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
21240 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21250 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
21260 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
21270 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
21280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
21290 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75  endSpace(StrAccu
212a0 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  m*,int);.char *s
212b0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
212c0 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
212d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
212e0 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
212f0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
21300 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
21310 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
21320 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
21330 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
21340 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
21350 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
21360 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
21370 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
21380 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
21390 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
213a0 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
213b0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
213c0 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
213d0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
213e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
213f0 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
21400 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
21410 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
21420 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
21430 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
21440 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
21450 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
21460 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
21470 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
21480 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
21490 52 65 63 6f 72 64 2a 29 3b 0a 23 65 6e 64 69 66  Record*);.#endif
214a0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
214b0 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
214c0 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
214d0 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
214e0 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
214f0 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29  void*(*)(size_t)
21500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
21510 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
21520 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
21530 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
21540 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
21550 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
21560 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
21570 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
21580 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
21590 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
215a0 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
215b0 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
215c0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
215d0 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
215e0 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
215f0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
21600 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
21610 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
21620 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21630 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
21640 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
21650 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21660 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
21670 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
21680 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
21690 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
216a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
216b0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
216c0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
216d0 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
216e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
216f0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
21700 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
21710 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
21720 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
21730 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
21740 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
21750 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
21760 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
21770 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
21780 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
21790 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
217a0 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
217b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
217c0 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
217d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
217e0 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
217f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21800 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
21810 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21820 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
21830 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21840 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
21850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21860 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
21870 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
21880 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21890 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
218a0 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
218b0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
218c0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
218d0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
218e0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
218f0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
21900 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
21910 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
21920 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
21930 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
21940 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
21950 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
21960 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
21970 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
21980 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
21990 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
219a0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
219b0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
219c0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
219d0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
219e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
219f0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
21a00 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
21a10 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
21a20 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
21a30 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
21a40 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
21a50 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
21a60 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
21a70 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
21a80 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
21a90 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
21aa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21ab0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
21ac0 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
21ad0 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
21ae0 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
21af0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
21b00 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
21b10 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
21b20 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
21b30 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
21b40 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
21b50 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
21b60 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
21b70 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
21b80 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21b90 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
21ba0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
21bb0 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
21bc0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
21bd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
21be0 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
21bf0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
21c00 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
21c10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
21c20 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
21c30 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
21c40 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
21c50 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
21c60 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
21c70 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
21c80 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
21c90 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
21ca0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
21cb0 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
21cc0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
21cd0 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
21ce0 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
21cf0 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
21d00 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
21d10 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
21d20 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
21d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
21d40 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
21d50 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
21d60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
21d70 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
21d80 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
21d90 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
21da0 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t *);.int sqlite
21db0 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
21dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21dd0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
21de0 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
21df0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
21e00 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
21e10 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
21e20 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
21e30 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
21e40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
21e50 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
21e60 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
21e70 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
21e80 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
21e90 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
21ea0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
21eb0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
21ec0 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
21ed0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
21ee0 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
21ef0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
21f00 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
21f10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
21f20 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  );.#endif../* De
21f30 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
21f40 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
21f50 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
21f60 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
21f70 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
21f80 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
21f90 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
21fa0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
21fb0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
21fc0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
21fd0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
21fe0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
21ff0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
22000 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
22010 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
22020 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
22030 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
22040 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
22050 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
22060 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
22070 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
22080 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
22090 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
220a0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
220b0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
220c0 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
220d0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
220e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
220f0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
22100 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22110 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
22120 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
22130 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
22140 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
22150 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
22160 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
22170 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
22180 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
22190 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
221a0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
221b0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
221c0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
221d0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
221e0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
221f0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22200 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
22210 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
22220 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
22230 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
22240 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
22250 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
22260 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
22270 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
22280 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
22290 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
222a0 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
222b0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
222c0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
222d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
222e0 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
222f0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
22300 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
22310 64 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 20 30  d(a,b,c,d,e,f) 0
22320 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
22330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
22340 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
22350 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
22360 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
22370 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22380 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
22390 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
223a0 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
223b0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
223c0 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
223d0 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
223e0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
223f0 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
22400 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
22410 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
22420 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
22430 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
22440 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
22450 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
22460 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
22470 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
22480 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
22490 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
224a0 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
224b0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
224c0 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
224d0 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
224e0 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
224f0 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
22500 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
22510 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
22520 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22530 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74  N_TEST.** is not
22540 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66   defined..*/.#if
22550 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22560 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
22570 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
22580 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
22590 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
225a0 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
225b0 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
225c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
225d0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
225e0 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
225f0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
22600 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
22610 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
22620 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20  _ROWID          
22630 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e   1.#define IN_IN
22640 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
22650 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e      2.#define IN
22660 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
22670 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65         3.#define
22680 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
22690 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20  DESC      4.int 
226a0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
226b0 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
226c0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64   *, int*);..#ifd
226d0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
226e0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
226f0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
22700 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
22710 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
22720 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
22730 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
22740 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22750 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
22760 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
22770 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
22780 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
22790 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
227a0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
227b0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
227c0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
227d0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
227e0 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
227f0 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
22800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
22810 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
22820 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
22830 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
22840 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
22850 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
22860 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
22870 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
22880 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
22890 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
228a0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
228b0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
228c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
228d0 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
228e0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
228f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
22900 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
22910 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
22920 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
22930 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
22940 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
22950 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
22960 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
22970 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22980 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
22990 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
229a0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
229b0 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
229c0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
229d0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
229e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
229f0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
22a00 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
22a10 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
22a20 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
22a30 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
22a40 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
22a50 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
22a60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
22a70 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
22a80 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
22a90 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
22aa0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
22ab0 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
22ac0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22ad0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
22ae0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
22af0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
22b00 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
22b10 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22b20 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
22b30 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
22b40 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
22b50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
22b60 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
22b70 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
22b80 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
22b90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
22ba0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
22bb0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
22bc0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
22bd0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
22be0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
22bf0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
22c00 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
22c10 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
22c20 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
22c30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
22c40 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
22c50 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
22c60 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
22c70 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
22c80 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
22c90 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
22ca0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
22cb0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
22cc0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
22cd0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
22ce0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22cf0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
22d00 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
22d10 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
22d20 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
22d30 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
22d40 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
22d50 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
22d60 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
22d70 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
22d80 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
22d90 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
22da0 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
22db0 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
22dc0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
22dd0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
22de0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
22df0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
22e00 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
22e10 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
22e20 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
22e30 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
22e40 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
22e50 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
22e60 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
22e70 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
22e80 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
22e90 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
22ea0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
22eb0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
22ec0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
22ed0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
22ee0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
22ef0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
22f00 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
22f10 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
22f20 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
22f30 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
22f40 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
22f50 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
22f60 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
22f70 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
22f80 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
22f90 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
22fa0 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
22fb0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
22fc0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
22fd0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
22fe0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
22ff0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23000 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
23010 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
23020 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
23030 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
23040 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
23050 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
23060 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
23070 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
23080 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
23090 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
230a0 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
230b0 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
230c0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
230d0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
230e0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
230f0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
23100 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
23110 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
23120 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
23130 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
23140 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
23150 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
23160 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
23170 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
23180 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
23190 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
231a0 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
231b0 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
231c0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
231d0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
231e0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
231f0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
23200 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
23210 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
23220 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
23230 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
23240 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
23250 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
23260 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
23270 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
23280 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
23290 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
232a0 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
232b0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
232c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
232d0 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
232e0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
232f0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23300 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
23310 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
23320 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
23330 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
23340 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
23350 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
23360 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
23370 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
23380 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
23390 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
233a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
233b0 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
233c0 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
233d0 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
233e0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
233f0 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
23400 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
23410 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
23420 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
23430 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
23440 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
23450 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
23460 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
23470 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
23480 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
23490 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
234a0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
234b0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
234c0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
234d0 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
234e0 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
234f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
23500 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
23510 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  c */..#endif /* 
23520 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
23530 0a                                               .