/ Hex Artifact Content
Login

Artifact d660a5ad543d775f28a46cf9510b5cb86e8097d2:


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 2f 2a 0a 2a 2a 20 49 6e 63  endif../*.** Inc
08a0: 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65  lude standard he
08b0: 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65  ader files as ne
08c0: 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65  cessary.*/.#ifde
08d0: 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a  f HAVE_STDINT_H.
08e0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74  #include <stdint
08f0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0900: 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f  f HAVE_INTTYPES_
0910: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74  H.#include <intt
0920: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0930: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0940: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
0950: 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e  sed to cast poin
0960: 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73  ters to integers
0970: 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73   and.** integers
0980: 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54   to pointers.  T
0990: 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68  he way you do th
09a0: 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f  is varies from o
09b0: 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74  ne compiler.** t
09c0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77  o the next, so w
09d0: 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64  e have developed
09e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
09f0: 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d  et of #if statem
0a00: 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72  ents.** to gener
0a10: 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ate appropriate 
0a20: 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64  macros for a wid
0a30: 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69  e range of compi
0a40: 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lers..**.** The 
0a50: 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77  correct "ANSI" w
0a60: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
0a70: 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70   to use the intp
0a80: 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55  tr_t type. .** U
0a90: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
0aa0: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
0ab0: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
0ac0: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
0ad0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
0ae0: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
0af0: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
0b00: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
0b10: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
0b20: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
0b30: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
0b40: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
0b50: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
0b60: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
0b70: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
0b80: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
0b90: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0ba0: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
0bb0: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
0bc0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
0bd0: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
0be0: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
0bf0: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
0c00: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
0c10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
0c20: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c30: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
0c40: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
0c50: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
0c60: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
0c70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0c80: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0c90: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0ca0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
0cb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0cc0: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
0cd0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
0ce0: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
0cf0: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
0d00: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
0d10: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
0d20: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
0d30: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
0d40: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
0d50: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0d70: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0d80: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0d90: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
0da0: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
0db0: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
0dc0: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
0dd0: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
0de0: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
0df0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e00: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e10: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
0e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
0e30: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
0e40: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
0e50: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
0e80: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
0e90: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
0ea0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
0eb0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
0ec0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
0ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0ee0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0ef0: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
0f00: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
0f10: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
0f20: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
0f30: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
0f40: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
0f50: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
0f60: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
0f70: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
0f80: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
0f90: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
0fa0: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
0fb0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
0fc0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
0fd0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
0fe0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
0ff0: 68 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c  he libary is mul
1000: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1010: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1020: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1030: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1040: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
1050: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
1060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1070: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
1080: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
1090: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
10b0: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
10c0: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
10d0: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
10e0: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
10f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1100: 48 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64  HREADSAFE).#if d
1110: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1120: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  E).# define SQLI
1130: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1140: 52 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23  READSAFE.#else.#
1150: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1160: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1170: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1180: 39 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64  9 */.#endif.#end
1190: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
11a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
11b0: 53 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73  STATUS macro mus
11c0: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
11d0: 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
11e0: 2a 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20  * It determines 
11f0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1200: 68 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61  he features rela
1210: 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54  ted to .** SQLIT
1220: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
1230: 55 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  US are available
1240: 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e   by default or n
1250: 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63  ot. This value c
1260: 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64  an.** be overrid
1270: 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75  den at runtime u
1280: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
1290: 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a  _config() API..*
12a0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
12b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
12c0: 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e  MSTATUS).# defin
12d0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12e0: 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e  _MEMSTATUS 1.#en
12f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74  dif../*.** Exact
1300: 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ly one of the fo
1310: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1320: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69  ust be defined i
1330: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70  n order to.** sp
1340: 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f  ecify which memo
1350: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75  ry allocation su
1360: 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a  bsystem to use..
1370: 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  **.**     SQLITE
1380: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20  _SYSTEM_MALLOC  
1390: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e          // Use n
13a0: 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c  ormal system mal
13b0: 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c  loc().**     SQL
13c0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
13d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
13e0: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
13f0: 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  eap API.**     S
1400: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1420: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
1430: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
1440: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
1450: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
1460: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
1470: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
1480: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
1490: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
14a0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
14b0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
14c0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
14d0: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
14e0: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
14f0: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
1500: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
1510: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
1520: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
1530: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
1540: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
1550: 0a 2a 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20  .** (Historical 
1560: 6e 6f 74 65 3a 20 20 54 68 65 72 65 20 75 73 65  note:  There use
1570: 64 20 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20  d to be several 
1580: 6f 74 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62  other options, b
1590: 75 74 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65  ut we've.** pare
15a0: 64 20 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73  d it down to jus
15b0: 74 20 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a  t these three.).
15c0: 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66  **.** If none of
15d0: 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64   the above are d
15e0: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74  efined, then set
15f0: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1600: 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20  ALLOC as.** the 
1610: 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20  default..*/.#if 
1620: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53  defined(SQLITE_S
1630: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b 64 65  YSTEM_MALLOC)+de
1640: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
1650: 33 32 5f 4d 41 4c 4c 4f 43 29 2b 64 65 66 69 6e  32_MALLOC)+defin
1660: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1670: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 41  UG)>1.# error "A
1680: 74 20 6d 6f 73 74 20 6f 6e 65 20 6f 66 20 74 68  t most one of th
1690: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
16a0: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
16b0: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
16c0: 20 69 73 20 61 6c 6c 6f 77 73 3a 20 53 51 4c 49   is allows: SQLI
16d0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
16e0: 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  , SQLITE_WIN32_M
16f0: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45  ALLOC, SQLITE_ME
1700: 4d 44 45 42 55 47 22 0a 23 65 6e 64 69 66 0a 23  MDEBUG".#endif.#
1710: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1720: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
1730: 2b 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  +defined(SQLITE_
1740: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 2b 64 65  WIN32_MALLOC)+de
1750: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
1760: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
1770: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
1780: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
1790: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
17a0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
17b0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
17c0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
17d0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
17e0: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
17f0: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
1800: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
1810: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
1820: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
1830: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
1840: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1850: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
1860: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
1870: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
1880: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
1890: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
18a0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
18b0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
18c0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
18d0: 55 6e 69 78 20 73 79 73 74 65 6d 73 2e 20 20 42  Unix systems.  B
18e0: 75 74 20 4d 61 63 20 4f 53 20 58 20 69 73 20 64  ut Mac OS X is d
18f0: 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 20 54 68 65  ifferent..** The
1900: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64   _XOPEN_SOURCE d
1910: 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f  efine causes pro
1920: 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53  blems for Mac OS
1930: 20 58 20 77 65 20 61 72 65 20 74 6f 6c 64 2c 0a   X we are told,.
1940: 2a 2a 20 73 6f 20 69 74 20 69 73 20 6f 6d 69 74  ** so it is omit
1950: 74 65 64 20 74 68 65 72 65 2e 20 20 53 65 65 20  ted there.  See 
1960: 74 69 63 6b 65 74 20 23 32 36 37 33 2e 0a 2a 2a  ticket #2673..**
1970: 0a 2a 2a 20 4c 61 74 65 72 20 77 65 20 6c 65 61  .** Later we lea
1980: 72 6e 20 74 68 61 74 20 5f 58 4f 50 45 4e 5f 53  rn that _XOPEN_S
1990: 4f 55 52 43 45 20 69 73 20 70 6f 6f 72 6c 79 20  OURCE is poorly 
19a0: 6f 72 20 69 6e 63 6f 72 72 65 63 74 6c 79 0a 2a  or incorrectly.*
19b0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 6f 6e  * implemented on
19c0: 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e 20 20   some systems.  
19d0: 53 6f 20 77 65 20 61 76 6f 69 64 20 64 65 66 69  So we avoid defi
19e0: 6e 69 6e 67 20 69 74 20 61 74 20 61 6c 6c 0a 2a  ning it at all.*
19f0: 2a 20 69 66 20 69 74 20 69 73 20 61 6c 72 65 61  * if it is alrea
1a00: 64 79 20 64 65 66 69 6e 65 64 20 6f 72 20 69 66  dy defined or if
1a10: 20 69 74 20 69 73 20 75 6e 6e 65 65 64 65 64 20   it is unneeded 
1a20: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 0a 2a  because we are.*
1a30: 2a 20 6e 6f 74 20 64 6f 69 6e 67 20 61 20 74 68  * not doing a th
1a40: 72 65 61 64 73 61 66 65 20 62 75 69 6c 64 2e 20  readsafe build. 
1a50: 20 54 69 63 6b 65 74 20 23 32 36 38 31 2e 0a 2a   Ticket #2681..*
1a60: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 69  *.** See also ti
1a70: 63 6b 65 74 20 23 32 37 34 31 2e 0a 2a 2f 0a 23  cket #2741..*/.#
1a80: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1a90: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1aa0: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1ab0: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1ac0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53 51 4c  _APPLE__) && SQL
1ad0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a 23  ITE_THREADSAFE.#
1ae0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1af0: 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a 20 4e  SOURCE 500  /* N
1b00: 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c 65 20  eeded to enable 
1b10: 70 74 68 72 65 61 64 20 72 65 63 75 72 73 69 76  pthread recursiv
1b20: 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23 65 6e  e mutexes */.#en
1b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54  dif../*.** The T
1b40: 43 4c 20 68 65 61 64 65 72 73 20 61 72 65 20 6f  CL headers are o
1b50: 6e 6c 79 20 6e 65 65 64 65 64 20 77 68 65 6e 20  nly needed when 
1b60: 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 54 43  compiling the TC
1b70: 4c 20 62 69 6e 64 69 6e 67 73 2e 0a 2a 2f 0a 23  L bindings..*/.#
1b80: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1b90: 45 5f 54 43 4c 29 20 7c 7c 20 64 65 66 69 6e 65  E_TCL) || define
1ba0: 64 28 54 43 4c 53 48 29 0a 23 20 69 6e 63 6c 75  d(TCLSH).# inclu
1bb0: 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 65 6e 64 69  de <tcl.h>.#endi
1bc0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6e 79 20 70 65  f../*.** Many pe
1bd0: 6f 70 6c 65 20 61 72 65 20 66 61 69 6c 69 6e 67  ople are failing
1be0: 20 74 6f 20 73 65 74 20 2d 44 4e 44 45 42 55 47   to set -DNDEBUG
1bf0: 3d 31 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  =1 when compilin
1c00: 67 20 53 51 4c 69 74 65 2e 0a 2a 2a 20 53 65 74  g SQLite..** Set
1c10: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
1c20: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
1c30: 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65  er and run faste
1c40: 72 2e 20 20 53 6f 20 74 68 65 20 66 6f 6c 6c 6f  r.  So the follo
1c50: 77 69 6e 67 0a 2a 2a 20 6c 69 6e 65 73 20 61 72  wing.** lines ar
1c60: 65 20 61 64 64 65 64 20 74 6f 20 61 75 74 6f 6d  e added to autom
1c70: 61 74 69 63 61 6c 6c 79 20 73 65 74 20 4e 44 45  atically set NDE
1c80: 42 55 47 20 75 6e 6c 65 73 73 20 74 68 65 20 2d  BUG unless the -
1c90: 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31 0a  DSQLITE_DEBUG=1.
1ca0: 2a 2a 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74  ** option is set
1cb0: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
1cc0: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
1cd0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
1ce0: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
1cf0: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
1d00: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
1d10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1d20: 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20  EBUG) .# define 
1d30: 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a  NDEBUG 1.#endif.
1d40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63  ./*.** The testc
1d50: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75  ase() macro is u
1d60: 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f  sed to aid in co
1d70: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20  verage testing. 
1d80: 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20   When .** doing 
1d90: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
1da0: 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20  , the condition 
1db0: 69 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d  inside the argum
1dc0: 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61  ent to.** testca
1dd0: 73 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61  se() must be eva
1de0: 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65  luated both true
1df0: 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72   and false in or
1e00: 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75  der to.** get fu
1e10: 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61  ll branch covera
1e20: 67 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73  ge.  The testcas
1e30: 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73  e() macro is ins
1e40: 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70  erted.** to help
1e50: 20 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65   ensure adequate
1e60: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69   test coverage i
1e70: 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73  n places where s
1e80: 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69  imple.** conditi
1e90: 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65  on/decision cove
1ea0: 72 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61  rage is inadequa
1eb0: 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  te.  For example
1ec0: 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  , testcase().** 
1ed0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
1ee0: 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72  ake sure boundar
1ef0: 79 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73  y values are tes
1f00: 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74  ted.  For.** bit
1f10: 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74  mask tests, test
1f20: 63 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73  case() can be us
1f30: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
1f40: 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73  each bit.** is s
1f50: 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75  ignificant and u
1f60: 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63  sed at least onc
1f70: 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74  e.  On switch st
1f80: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72  atements.** wher
1f90: 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73  e multiple cases
1fa0: 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20   go to the same 
1fb0: 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74  block of code, t
1fc0: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1fd0: 20 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c   insure that all
1fe0: 20 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75   cases are evalu
1ff0: 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64  ated..**.*/.#ifd
2000: 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ef SQLITE_COVERA
2010: 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  GE_TEST.  void s
2020: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69  qlite3Coverage(i
2030: 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65  nt);.# define te
2040: 73 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58  stcase(X)  if( X
2050: 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72   ){ sqlite3Cover
2060: 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d  age(__LINE__); }
2070: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2080: 74 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64  testcase(X).#end
2090: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45  if../*.** The TE
20a0: 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20  STONLY macro is 
20b0: 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20  used to enclose 
20c0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
20d0: 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65  tions or.** othe
20e0: 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74  r bits of code t
20f0: 68 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74  hat are needed t
2100: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72  o support the ar
2110: 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69  guments.** withi
2120: 6e 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64  n testcase() and
2130: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73   assert() macros
2140: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2150: 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66  d(NDEBUG) || def
2160: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
2170: 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66  RAGE_TEST).# def
2180: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20  ine TESTONLY(X) 
2190: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
21a0: 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65  e TESTONLY(X).#e
21b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
21c0: 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20  times we need a 
21d0: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  small amount of 
21e0: 63 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76  code such as a v
21f0: 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69  ariable initiali
2200: 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74  zation.** to set
2210: 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61  up for a later a
2220: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2230: 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61  t.  We do not wa
2240: 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a  nt this code to.
2250: 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61  ** appear when a
2260: 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62  ssert() is disab
2270: 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  led.  The follow
2280: 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65  ing macro is the
2290: 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74  refore.** used t
22a0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73  o contain that s
22b0: 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20  etup code.  The 
22c0: 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74  "VVA" acronym st
22d0: 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72  ands for.** "Ver
22e0: 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
22f0: 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65  ation, and Accre
2300: 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f  ditation".  In o
2310: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
2320: 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56  ** code within V
2330: 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f  VA_ONLY() will o
2340: 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76  nly run during v
2350: 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63  erification proc
2360: 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  esses..*/.#ifnde
2370: 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e  f NDEBUG.# defin
2380: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58  e VVA_ONLY(X)  X
2390: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23a0: 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64  VVA_ONLY(X).#end
23b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c  if../*.** The AL
23c0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d  WAYS and NEVER m
23d0: 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62  acros surround b
23e0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
23f0: 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65  ns which .** are
2400: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77   intended to alw
2410: 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66  ays be true or f
2420: 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65  alse, respective
2430: 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70  ly.  Such.** exp
2440: 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62  ressions could b
2450: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
2460: 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65  he code complete
2470: 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a  ly.  But they.**
2480: 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e   are included in
2490: 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20   a few cases in 
24a0: 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65  order to enhance
24b0: 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a   the resilience.
24c0: 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20  ** of SQLite to 
24d0: 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76  unexpected behav
24e0: 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68  ior - to make th
24f0: 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61  e code "self-hea
2500: 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63  ling".** or "duc
2510: 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61  tile" rather tha
2520: 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65  n being "brittle
2530: 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61  " and crashing a
2540: 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68  t the first.** h
2550: 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64  int of unplanned
2560: 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a   behavior..**.**
2570: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2580: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
2590: 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20  R are added for 
25a0: 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a  defensive code..
25b0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67  **.** When doing
25c0: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
25d0: 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  g ALWAYS and NEV
25e0: 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65  ER are hard-code
25f0: 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20  d to.** be true 
2600: 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61  and false so tha
2610: 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c  t the unreachabl
2620: 65 20 63 6f 64 65 20 74 68 65 6e 20 73 70 65 63  e code then spec
2630: 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  ify will.** not 
2640: 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e  be counted as un
2650: 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a  tested code..*/.
2660: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2670: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2680: 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  ).# define ALWAY
2690: 53 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20  S(X)      (1).# 
26a0: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
26b0: 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20        (0).#elif 
26c0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
26d0: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
26e0: 28 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a  (X)      ((X)?1:
26f0: 28 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23  (assert(0),0)).#
2700: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
2710: 20 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73         ((X)?(ass
2720: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
2730: 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  se.# define ALWA
2740: 59 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23  YS(X)      (X).#
2750: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
2760: 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69         (X).#endi
2770: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
2780: 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  true (non-zero) 
2790: 69 66 20 74 68 65 20 69 6e 70 75 74 20 69 73 20  if the input is 
27a0: 61 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  a integer that i
27b0: 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74  s too large.** t
27c0: 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73  o fit in 32-bits
27d0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
27e0: 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
27f0: 76 61 72 69 6f 75 73 20 74 65 73 74 63 61 73 65  various testcase
2800: 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20  ().** macros to 
2810: 76 65 72 69 66 79 20 74 68 61 74 20 77 65 20 68  verify that we h
2820: 61 76 65 20 74 65 73 74 65 64 20 53 51 4c 69 74  ave tested SQLit
2830: 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65  e for large-file
2840: 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65   support..*/.#de
2850: 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28  fine IS_BIG_INT(
2860: 58 29 20 20 28 28 28 58 29 26 7e 28 69 36 34 29  X)  (((X)&~(i64)
2870: 30 78 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a  0xffffffff)!=0).
2880: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f  ./*.** The macro
2890: 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61   unlikely() is a
28a0: 20 68 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f   hint that surro
28b0: 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a  unds a boolean.*
28c0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  * expression tha
28d0: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c  t is usually fal
28e0: 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c  se.  Macro likel
28f0: 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a  y() surrounds.**
2900: 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65   a boolean expre
2910: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
2920: 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 47 43 43  ually true.  GCC
2930: 20 69 73 20 61 62 6c 65 20 74 6f 0a 2a 2a 20 75   is able to.** u
2940: 73 65 20 74 68 65 73 65 20 68 69 6e 74 73 20 74  se these hints t
2950: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
2960: 72 20 63 6f 64 65 2c 20 73 6f 6d 65 74 69 6d 65  r code, sometime
2970: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
2980: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 30  d(__GNUC__) && 0
2990: 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  .# define likely
29a0: 28 58 29 20 20 20 20 5f 5f 62 75 69 6c 74 69 6e  (X)    __builtin
29b0: 5f 65 78 70 65 63 74 28 28 58 29 2c 31 29 0a 23  _expect((X),1).#
29c0: 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79   define unlikely
29d0: 28 58 29 20 20 5f 5f 62 75 69 6c 74 69 6e 5f 65  (X)  __builtin_e
29e0: 78 70 65 63 74 28 28 58 29 2c 30 29 0a 23 65 6c  xpect((X),0).#el
29f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65  se.# define like
2a00: 6c 79 28 58 29 20 20 20 20 21 21 28 58 29 0a 23  ly(X)    !!(X).#
2a10: 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79   define unlikely
2a20: 28 58 29 20 20 21 21 28 58 29 0a 23 65 6e 64 69  (X)  !!(X).#endi
2a30: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
2a40: 69 74 65 33 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ite3.h".#include
2a50: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
2a60: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
2a70: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
2a80: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
2a90: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2aa0: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
2ab0: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
2ac0: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
2ad0: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
2ae0: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
2af0: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
2b00: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
2b10: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
2b20: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
2b30: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
2b40: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2b50: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
2b60: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
2b70: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
2b80: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
2b90: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2ba0: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
2bb0: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
2bc0: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
2bd0: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
2be0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
2bf0: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
2c00: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
2c10: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
2c20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
2c30: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
2c40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
2c50: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
2c60: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
2c70: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
2c80: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
2c90: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
2ca0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2cb0: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
2cc0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
2cd0: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
2ce0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
2cf0: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
2d00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
2d10: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
2d20: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
2d30: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
2d40: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
2d50: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
2d60: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
2d70: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
2d80: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
2d90: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
2da0: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
2db0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2dc0: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
2dd0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
2de0: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
2df0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
2e00: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2e10: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
2e20: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
2e30: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
2e40: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
2e50: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
2e60: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
2e70: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
2e80: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
2e90: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
2ea0: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
2eb0: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
2ec0: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
2ed0: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
2ee0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
2ef0: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
2f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2f10: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
2f20: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
2f30: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
2f40: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
2f50: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
2f60: 4c 45 5f 46 4f 52 4d 41 54 20 31 0a 23 65 6e 64  LE_FORMAT 1.#end
2f70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
2f80: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
2f90: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
2fa0: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
2fb0: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
2fc0: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
2fd0: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
2fe0: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
2ff0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3000: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
3010: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3020: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
3030: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
3040: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
3050: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
3060: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
3070: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
3080: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
3090: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
30a0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
30b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
30c0: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
30d0: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
30e0: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
30f0: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3100: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
3110: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
3120: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
3130: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
3140: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
3150: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
3160: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3170: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3180: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3190: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
31a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 68  #endif../*.** Ch
31b0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
31c0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
31d0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
31e0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
31f0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
3200: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
3210: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
3220: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
3230: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
3240: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
3250: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
3260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
3270: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
3280: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
3290: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
32a0: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
32b0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
32c0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
32d0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
32e0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
32f0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
3300: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
3310: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
3320: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
3330: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
3340: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
3350: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
3360: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
3370: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
3380: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
3390: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
33a0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
33b0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
33c0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
33d0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
33e0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
33f0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
3400: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
3410: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
3420: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
3430: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
3440: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
3450: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
3460: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3470: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
3480: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3490: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
34a0: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
34b0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
34c0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
34d0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
34e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
34f0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
3500: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
3510: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
3520: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3530: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
3540: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3550: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
3560: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3570: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
3580: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
3590: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
35a0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
35b0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
35c0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
35d0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
35e0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
35f0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
3600: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3610: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
3620: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3630: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
3640: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
3650: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
3660: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
3670: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
3680: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
3690: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
36a0: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
36b0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
36c0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
36d0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
36e0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
36f0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
3700: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
3710: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
3720: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
3730: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
3740: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3750: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
3760: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
3770: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
3780: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
3790: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
37a0: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
37b0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
37c0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
37d0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
37e0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
37f0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
3800: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
3810: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
3820: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
3830: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
3840: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
3850: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
3860: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
3870: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
3880: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
3890: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
38a0: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
38b0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
38c0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
38d0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
38e0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
38f0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
3900: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
3910: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
3930: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
3940: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
3950: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
3960: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
3970: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
3980: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
3990: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
39a0: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
39b0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
39c0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
39d0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
39e0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
39f0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
3a00: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
3a10: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
3a20: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
3a30: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
3a40: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
3a50: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
3a60: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
3a70: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
3a80: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
3a90: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
3aa0: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
3ab0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
3ac0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
3ad0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
3ae0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
3af0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
3b00: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
3b10: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
3b20: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
3b30: 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20 61  ,.** evaluated a
3b40: 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69  t runtime..*/.#i
3b50: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
3b60: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
3b70: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
3b80: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
3b90: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
3ba0: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
3bb0: 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 7c   defined(i386) |
3bc0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
3bd0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
3be0: 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20 20  M_IX86)\.       
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64        || defined
3c10: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
3c20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
3c30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3c40: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
3c50: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3c60: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
3c70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3c80: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
3c90: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
3ca0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3cb0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
3cc0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
3cd0: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
3ce0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3cf0: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
3d00: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
3d10: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
3d20: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3d30: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
3d40: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
3d50: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
3d60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
3d70: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
3d80: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
3d90: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
3da0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
3db0: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
3dc0: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
3dd0: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
3de0: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
3df0: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
3e00: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
3e10: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
3e20: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
3e30: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
3e40: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
3e50: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
3e60: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
3e70: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
3e80: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
3e90: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
3ea0: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
3eb0: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
3ec0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
3ed0: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
3ee0: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
3ef0: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
3f00: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
3f10: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
3f20: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
3f30: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
3f40: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
3f50: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
3f60: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
3f70: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
3f80: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
3f90: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
3fa0: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
3fb0: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
3fc0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
3fd0: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
3fe0: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
3ff0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
4000: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
4010: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
4020: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
4030: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
4040: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
4050: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
4060: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
4070: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
4080: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e  c() implemention
4090: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
40a0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
40b0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
40c0: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
40d0: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
40e0: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
40f0: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
4100: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
4110: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
4120: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
4130: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
4140: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
4150: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
4160: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4170: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4180: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
4190: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
41a0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  endif.../*.** An
41b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
41c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
41d0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
41e0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
41f0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
4200: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
4210: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a  qlite handle. .*
4220: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
4230: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
4240: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
4250: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
4260: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
4270: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
4280: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
4290: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
42a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
42b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
42c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
42d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
42e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
42f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
4300: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
4310: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
4320: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
4330: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
4340: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
4350: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
4360: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
4370: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
4380: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
4390: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
43a0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
43b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
43c0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
43d0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
43e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
4410: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
4420: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
4430: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
4440: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4450: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
4460: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
4470: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
4480: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
4490: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
44a0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
44b0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
44c0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
44d0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
44e0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
44f0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
4500: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
4510: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
4520: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
4530: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
4540: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
4550: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
4560: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
4570: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
4580: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
4590: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
45a0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
45b0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
45c0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
45d0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
45e0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
45f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
4600: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
4610: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
4620: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
4630: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
4640: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
4650: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
4660: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
4670: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
4680: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
4690: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
46a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
46b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
46c0: 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ()..** This is a
46d0: 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78 74 65 6e  n internal exten
46e0: 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54 45 5f 53  sion to SQLITE_S
46f0: 54 41 54 49 43 20 61 6e 64 20 53 51 4c 49 54 45  TATIC and SQLITE
4700: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
4710: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
4720: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
4730: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
4740: 65 29 73 71 6c 69 74 65 33 44 62 46 72 65 65 29  e)sqlite3DbFree)
4750: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
4760: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
4770: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
4780: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
4790: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
47a0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
47b0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
47c0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
47d0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
47e0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
47f0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
4800: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
4810: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
4820: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
4830: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
4840: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
4850: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
4860: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
4870: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
4880: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
4890: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
48a0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
48b0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
48c0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
48d0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
48e0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
48f0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
4900: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
4910: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
4920: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
4930: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
4940: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
4950: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
4960: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
4970: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
4980: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
4990: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
49a0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
49b0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
49c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
49d0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
49e0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
49f0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
4a00: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
4a10: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
4a20: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
4a30: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
4a40: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
4a50: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
4a60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
4a70: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
4a80: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
4a90: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
4aa0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
4ab0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
4ac0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
4ad0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
4ae0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
4af0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
4b00: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
4b10: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
4b20: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
4b30: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
4b40: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
4b50: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
4b60: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
4b70: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
4b80: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20  e SQLITE_WSD .  
4b90: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
4ba0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
4bb0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4bc0: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
4bd0: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
4be0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
4bf0: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
4c00: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
4c10: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
4c20: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
4c30: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
4c40: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
4c50: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
4c60: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a  s deliberately .
4c70: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
4c80: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
4c90: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
4ca0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
4cb0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
4cc0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
4cd0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
4ce0: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
4cf0: 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c  ple the .** impl
4d00: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
4d10: 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73   SQL aggregate s
4d20: 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  tep callback may
4d30: 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20   not use the.** 
4d40: 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61  parameter indica
4d50: 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20  ting the number 
4d60: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
4d70: 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65  sed to the aggre
4d80: 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b  gate,.** if it k
4d90: 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69  nows that this i
4da0: 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77  s enforced elsew
4db0: 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  here..**.** When
4dc0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
4dd0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
4de0: 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20  d at all within 
4df0: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
4e00: 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73  nction,.** it is
4e10: 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64   generally named
4e20: 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e   "NotUsed" or "N
4e30: 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65  otUsed2" to make
4e40: 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65   things even cle
4e50: 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72  arer..** However
4e60: 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d  , these macros m
4e70: 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ay also be used 
4e80: 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e  to suppress warn
4e90: 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a  ings related to.
4ea0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  ** parameters th
4eb0: 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  at may or may no
4ec0: 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64  t be used depend
4ed0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69  ing on compilati
4ee0: 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46  on options..** F
4ef0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65  or example those
4f00: 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79   parameters only
4f10: 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28   used in assert(
4f20: 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e  ) statements. In
4f30: 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20   these.** cases 
4f40: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61  the parameters a
4f50: 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20  re named as per 
4f60: 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e  the usual conven
4f70: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
4f80: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
4f90: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
4fa0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
4fb0: 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55  ARAMETER2(x,y) U
4fc0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
4fd0: 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  x),UNUSED_PARAME
4fe0: 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f  TER(y)../*.** Fo
4ff0: 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73  rward references
5000: 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a   to structures.*
5010: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5020: 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f   AggInfo AggInfo
5030: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5040: 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74   AuthContext Aut
5050: 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  hContext;.typede
5060: 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  f struct Autoinc
5070: 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f  Info AutoincInfo
5080: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5090: 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a   Bitvec Bitvec;.
50a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
50b0: 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a  ollSeq CollSeq;.
50c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
50d0: 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79  olumn Column;.ty
50e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20  pedef struct Db 
50f0: 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  Db;.typedef stru
5100: 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61  ct Schema Schema
5110: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5120: 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65   Expr Expr;.type
5130: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c  def struct ExprL
5140: 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79  ist ExprList;.ty
5150: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5160: 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a  rSpan ExprSpan;.
5170: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
5180: 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65  Key FKey;.typede
5190: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  f struct FuncDes
51a0: 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74  tructor FuncDest
51b0: 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20  ructor;.typedef 
51c0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46  struct FuncDef F
51d0: 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20  uncDef;.typedef 
51e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
51f0: 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a  sh FuncDefHash;.
5200: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5210: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
5220: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
5230: 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65  ex Index;.typede
5240: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  f struct IndexSa
5250: 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65  mple IndexSample
5260: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5270: 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61   KeyClass KeyCla
5280: 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ss;.typedef stru
5290: 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e  ct KeyInfo KeyIn
52a0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
52b0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f  ct Lookaside Loo
52c0: 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20  kaside;.typedef 
52d0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
52e0: 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  Slot LookasideSl
52f0: 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ot;.typedef stru
5300: 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65  ct Module Module
5310: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5320: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d   NameContext Nam
5330: 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  eContext;.typede
5340: 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50  f struct Parse P
5350: 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74  arse;.typedef st
5360: 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53  ruct RowSet RowS
5370: 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  et;.typedef stru
5380: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76  ct Savepoint Sav
5390: 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20  epoint;.typedef 
53a0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
53b0: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
53c0: 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63  ruct SrcList Src
53d0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
53e0: 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74  ruct StrAccum St
53f0: 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20  rAccum;.typedef 
5400: 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62  struct Table Tab
5410: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5420: 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62  ct TableLock Tab
5430: 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20  leLock;.typedef 
5440: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b  struct Token Tok
5450: 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  en;.typedef stru
5460: 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67  ct Trigger Trigg
5470: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
5480: 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72  ct TriggerPrg Tr
5490: 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65  iggerPrg;.typede
54a0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
54b0: 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70  Step TriggerStep
54c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
54d0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
54e0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a  UnpackedRecord;.
54f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
5500: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
5510: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
5520: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
5530: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
5540: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
5550: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
5560: 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a  Plan WherePlan;.
5570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5580: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
5590: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
55a0: 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68  ct WhereLevel Wh
55b0: 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a  ereLevel;../*.**
55c0: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
55d0: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
55e0: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
55f0: 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20  he "u8" and .** 
5600: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
5610: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
5620: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
5630: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
5640: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
5650: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
5660: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
5670: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
5680: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
5690: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
56a0: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
56b0: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a  ude "pcache.h"..
56c0: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
56d0: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
56e0: 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  h".../*.** Each 
56f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
5700: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
5710: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
5720: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
5730: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5740: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
5750: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
5760: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
5770: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
5780: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
5790: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
57a0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
57b0: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
57c0: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
57d0: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
57e0: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
57f0: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
5800: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
5810: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
5820: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
5830: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
5840: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
5850: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  f this database 
5860: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
5870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
5880: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
5890: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
58a0: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
58b0: 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20   inTrans;       
58c0: 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69     /* 0: not wri
58d0: 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73  table.  1: Trans
58e0: 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63  action.  2: Chec
58f0: 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73  kpoint */.  u8 s
5900: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
5910: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
5920: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
5930: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
5940: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
5950: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
5960: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
5970: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
5980: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
5990: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
59a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
59b0: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
59c0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
59d0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
59e0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
59f0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5a00: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
5a10: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
5a20: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
5a30: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
5a40: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
5a50: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
5a60: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
5a70: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
5a80: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
5a90: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
5aa0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
5ab0: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
5ac0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
5ad0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
5ae0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
5af0: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
5b00: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
5b10: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
5b20: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
5b30: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
5b40: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
5b50: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
5b60: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
5b70: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
5b80: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
5b90: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
5ba0: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
5bb0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
5bc0: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
5bd0: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
5be0: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
5bf0: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
5c00: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
5c10: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
5c20: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
5c30: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
5c40: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
5c50: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
5c60: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
5c70: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
5c80: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
5c90: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
5ca0: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
5cb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
5cc0: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
5cd0: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
5ce0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
5cf0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
5d00: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
5d10: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
5d20: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
5d30: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
5d40: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
5d50: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
5d60: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
5d70: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
5d80: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
5d90: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
5da0: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
5db0: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
5dc0: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
5dd0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
5de0: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
5df0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
5e00: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
5e10: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
5e20: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
5e30: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
5e40: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
5e50: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
5e60: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
5e70: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
5e80: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
5e90: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
5ea0: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
5eb0: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
5ec0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
5ed0: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
5ee0: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5f00: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
5f10: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
5f20: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
5f30: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
5f40: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
5f50: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
5f60: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
5f70: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
5f80: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
5f90: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
5fa0: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
5fb0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
5fc0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
5fd0: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
5fe0: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
5ff0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
6000: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
6010: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
6020: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
6030: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6040: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
6050: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
6060: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
6070: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
6080: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6090: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
60a0: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
60b0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
60c0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
60d0: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
60e0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
60f0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
6100: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6110: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
6120: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
6130: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
6140: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6150: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
6160: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6170: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
6180: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
6190: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
61a0: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
61b0: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
61c0: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
61d0: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
61e0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
61f0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
6200: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
6210: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
6220: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
6230: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6240: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6250: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6260: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6270: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6280: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6290: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
62a0: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
62b0: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
62c0: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
62d0: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
62e0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
62f0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6300: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6310: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6320: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6330: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6340: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6350: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6360: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6370: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6380: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6390: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
63a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
63b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
63c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
63d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
63e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
63f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6400: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6410: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6420: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6430: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6440: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6450: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6460: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6470: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6480: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6490: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
64a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
64b0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
64c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
64d0: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
64e0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
64f0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6500: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6510: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6520: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6530: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6540: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6550: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6560: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6570: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6580: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6590: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
65a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
65b0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
65c0: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
65d0: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
65e0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
65f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6600: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6610: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6620: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6630: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6640: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6650: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6660: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6670: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6680: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6690: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
66a0: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
66b0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
66c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
66d0: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
66e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
66f0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6700: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6710: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6720: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6730: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6740: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6750: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6770: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6780: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6790: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
67a0: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
67b0: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
67c0: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
67d0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
67e0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
67f0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
6800: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
6810: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
6820: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
6830: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
6840: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
6850: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
6860: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
6870: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
6880: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
6890: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
68a0: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
68b0: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
68c0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
68d0: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
68e0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
68f0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
6900: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
6910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6920: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
6930: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
6940: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
6950: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
6960: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
6970: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
6980: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
6990: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
69a0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
69b0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
69c0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
69d0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
69e0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
69f0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
6a00: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
6a10: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
6a20: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
6a30: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
6a40: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
6a50: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
6a60: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
6a70: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
6a80: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
6a90: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
6aa0: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
6ab0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
6ac0: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
6ad0: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
6ae0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
6af0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
6b00: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
6b10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
6b20: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
6b30: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
6b40: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
6b50: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
6b60: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
6b70: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
6b80: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
6b90: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
6ba0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
6bb0: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
6bc0: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
6bd0: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
6be0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
6bf0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
6c00: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
6c10: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
6c20: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6c30: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
6c40: 54 68 65 20 73 71 6c 69 74 65 2e 6c 61 73 74 52  The sqlite.lastR
6c50: 6f 77 69 64 20 72 65 63 6f 72 64 73 20 74 68 65  owid records the
6c60: 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77   last insert row
6c70: 69 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  id generated by 
6c80: 61 6e 0a 2a 2a 20 69 6e 73 65 72 74 20 73 74 61  an.** insert sta
6c90: 74 65 6d 65 6e 74 2e 20 20 49 6e 73 65 72 74 73  tement.  Inserts
6ca0: 20 6f 6e 20 76 69 65 77 73 20 64 6f 20 6e 6f 74   on views do not
6cb0: 20 61 66 66 65 63 74 20 69 74 73 20 76 61 6c 75   affect its valu
6cc0: 65 2e 20 20 45 61 63 68 0a 2a 2a 20 74 72 69 67  e.  Each.** trig
6cd0: 67 65 72 20 68 61 73 20 69 74 73 20 6f 77 6e 20  ger has its own 
6ce0: 63 6f 6e 74 65 78 74 2c 20 73 6f 20 74 68 61 74  context, so that
6cf0: 20 6c 61 73 74 52 6f 77 69 64 20 63 61 6e 20 62   lastRowid can b
6d00: 65 20 75 70 64 61 74 65 64 20 69 6e 73 69 64 65  e updated inside
6d10: 0a 2a 2a 20 74 72 69 67 67 65 72 73 20 61 73 20  .** triggers as 
6d20: 75 73 75 61 6c 2e 20 20 54 68 65 20 70 72 65 76  usual.  The prev
6d30: 69 6f 75 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  ious value will 
6d40: 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 63 65  be restored once
6d50: 20 74 68 65 20 74 72 69 67 67 65 72 0a 2a 2a 20   the trigger.** 
6d60: 65 78 69 74 73 2e 20 20 55 70 6f 6e 20 65 6e 74  exits.  Upon ent
6d70: 65 72 69 6e 67 20 61 20 62 65 66 6f 72 65 20 6f  ering a before o
6d80: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69  r instead of tri
6d90: 67 67 65 72 2c 20 6c 61 73 74 52 6f 77 69 64 20  gger, lastRowid 
6da0: 69 73 20 6e 6f 0a 2a 2a 20 6c 6f 6e 67 65 72 20  is no.** longer 
6db0: 28 73 69 6e 63 65 20 61 66 74 65 72 20 76 65 72  (since after ver
6dc0: 73 69 6f 6e 20 32 2e 38 2e 31 32 29 20 72 65 73  sion 2.8.12) res
6dd0: 65 74 20 74 6f 20 2d 31 2e 0a 2a 2a 0a 2a 2a 20  et to -1..**.** 
6de0: 54 68 65 20 73 71 6c 69 74 65 2e 6e 43 68 61 6e  The sqlite.nChan
6df0: 67 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 75 6e  ge does not coun
6e00: 74 20 63 68 61 6e 67 65 73 20 77 69 74 68 69 6e  t changes within
6e10: 20 74 72 69 67 67 65 72 73 20 61 6e 64 20 6b 65   triggers and ke
6e20: 65 70 73 20 6e 6f 0a 2a 2a 20 63 6f 6e 74 65 78  eps no.** contex
6e30: 74 2e 20 20 49 74 20 69 73 20 72 65 73 65 74 20  t.  It is reset 
6e40: 61 74 20 73 74 61 72 74 20 6f 66 20 73 71 6c 69  at start of sqli
6e50: 74 65 33 5f 65 78 65 63 2e 0a 2a 2a 20 54 68 65  te3_exec..** The
6e60: 20 73 71 6c 69 74 65 2e 6c 73 43 68 61 6e 67 65   sqlite.lsChange
6e70: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
6e80: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
6e90: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 6c 61  s made by the la
6ea0: 73 74 0a 2a 2a 20 69 6e 73 65 72 74 2c 20 75 70  st.** insert, up
6eb0: 64 61 74 65 2c 20 6f 72 20 64 65 6c 65 74 65 20  date, or delete 
6ec0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 74 20 72  statement.  It r
6ed0: 65 6d 61 69 6e 73 20 63 6f 6e 73 74 61 6e 74 20  emains constant 
6ee0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 0a 2a  throughout the.*
6ef0: 2a 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  * length of a st
6f00: 61 74 65 6d 65 6e 74 20 61 6e 64 20 69 73 20 74  atement and is t
6f10: 68 65 6e 20 75 70 64 61 74 65 64 20 62 79 20 4f  hen updated by O
6f20: 50 5f 53 65 74 43 6f 75 6e 74 73 2e 20 20 49 74  P_SetCounts.  It
6f30: 20 6b 65 65 70 73 20 61 0a 2a 2a 20 63 6f 6e 74   keeps a.** cont
6f40: 65 78 74 20 73 74 61 63 6b 20 6a 75 73 74 20 6c  ext stack just l
6f50: 69 6b 65 20 6c 61 73 74 52 6f 77 69 64 20 73 6f  ike lastRowid so
6f60: 20 74 68 61 74 20 74 68 65 20 63 6f 75 6e 74 20   that the count 
6f70: 6f 66 20 63 68 61 6e 67 65 73 0a 2a 2a 20 77 69  of changes.** wi
6f80: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 20 69  thin a trigger i
6f90: 73 20 6e 6f 74 20 73 65 65 6e 20 6f 75 74 73 69  s not seen outsi
6fa0: 64 65 20 74 68 65 20 74 72 69 67 67 65 72 2e 20  de the trigger. 
6fb0: 20 43 68 61 6e 67 65 73 20 74 6f 20 76 69 65 77   Changes to view
6fc0: 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 61 66 66 65  s do not.** affe
6fd0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ct the value of 
6fe0: 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 20 54 68 65  lsChange..** The
6ff0: 20 73 71 6c 69 74 65 2e 63 73 43 68 61 6e 67 65   sqlite.csChange
7000: 20 6b 65 65 70 73 20 74 72 61 63 6b 20 6f 66 20   keeps track of 
7010: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 75  the number of cu
7020: 72 72 65 6e 74 20 63 68 61 6e 67 65 73 20 28 73  rrent changes (s
7030: 69 6e 63 65 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ince.** the last
7040: 20 73 74 61 74 65 6d 65 6e 74 29 20 61 6e 64 20   statement) and 
7050: 69 73 20 75 73 65 64 20 74 6f 20 75 70 64 61 74  is used to updat
7060: 65 20 73 71 6c 69 74 65 5f 6c 73 43 68 61 6e 67  e sqlite_lsChang
7070: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  e..**.** The mem
7080: 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 73 71  ber variables sq
7090: 6c 69 74 65 2e 65 72 72 43 6f 64 65 2c 20 73 71  lite.errCode, sq
70a0: 6c 69 74 65 2e 7a 45 72 72 4d 73 67 20 61 6e 64  lite.zErrMsg and
70b0: 20 73 71 6c 69 74 65 2e 7a 45 72 72 4d 73 67 31   sqlite.zErrMsg1
70c0: 36 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 6d  6.** store the m
70d0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
70e0: 20 63 6f 64 65 20 61 6e 64 2c 20 69 66 20 61 70   code and, if ap
70f0: 70 6c 69 63 61 62 6c 65 2c 20 73 74 72 69 6e 67  plicable, string
7100: 2e 20 54 68 65 0a 2a 2a 20 69 6e 74 65 72 6e 61  . The.** interna
7110: 6c 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  l function sqlit
7120: 65 33 45 72 72 6f 72 28 29 20 69 73 20 75 73 65  e3Error() is use
7130: 64 20 74 6f 20 73 65 74 20 74 68 65 73 65 20 76  d to set these v
7140: 61 72 69 61 62 6c 65 73 0a 2a 2a 20 63 6f 6e 73  ariables.** cons
7150: 69 73 74 65 6e 74 6c 79 2e 0a 2a 2f 0a 73 74 72  istently..*/.str
7160: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
7170: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
7180: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
7190: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
71a0: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
71d0: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
71e0: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 44 62 20   in use */.  Db 
71f0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
7200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
7210: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
7220: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7240: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
7250: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
7260: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
7270: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
7280: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
7290: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
72a0: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
72b0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
72d0: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
72e0: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
72f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
7300: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
7310: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
7320: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
7330: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
7340: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
7350: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
7360: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
7370: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
7380: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
7390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
73a0: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
73b0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
73c0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
73d0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
73e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
73f0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
7400: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
7410: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
7420: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7430: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
7440: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
7450: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
7460: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
7470: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
7480: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
7490: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
74a0: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
74b0: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
74c0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
74d0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
74e0: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
74f0: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
7500: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
7510: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
7520: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
7530: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
7540: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
7550: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
7560: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
7570: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
7580: 2f 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 3b 20  /.  int nTable; 
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
75b0: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
75c0: 61 62 61 73 65 20 2a 2f 0a 20 20 43 6f 6c 6c 53  abase */.  CollS
75d0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
75e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
75f0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
7600: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
7610: 52 59 29 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  RY) */.  i64 las
7620: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
7630: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
7640: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
7650: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
7660: 29 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  ) */.  u32 magic
7670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7680: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7690: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
76a0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
76b0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
76e0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
76f0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7700: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7720: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7730: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7740: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 73 71  hanges() */.  sq
7750: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
7760: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
7770: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
7780: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
7790: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
77a0: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
77b0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
77c0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
77d0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
77e0: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
77f0: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
7800: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7820: 57 68 65 6e 20 62 61 63 6b 20 69 73 20 62 65 69  When back is bei
7830: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
7840: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7850: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7860: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7870: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7880: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7890: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
78b0: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
78c0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
78d0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
78e0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
78f0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
7900: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
7910: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
7920: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
7930: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
7940: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7950: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
7960: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
7970: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
7980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7990: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
79a0: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
79b0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
79c0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
79d0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
79e0: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
79f0: 6e 65 73 20 2a 2f 0a 20 20 69 6e 74 20 61 63 74  nes */.  int act
7a00: 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20  iveVdbeCnt;     
7a10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7a20: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
7a30: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f  tly executing */
7a40: 0a 20 20 69 6e 74 20 77 72 69 74 65 56 64 62 65  .  int writeVdbe
7a50: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
7a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
7a70: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
7a80: 61 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20  are writing */. 
7a90: 20 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74   int vdbeExecCnt
7aa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
7ab0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
7ac0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
7ad0: 45 78 65 63 28 29 20 2a 2f 0a 20 20 76 6f 69 64  Exec() */.  void
7ae0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
7af0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
7b00: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
7b10: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
7b20: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7b50: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
7b60: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
7b70: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
7b80: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7b90: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
7ba0: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
7bb0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
7bc0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7be0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
7bf0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
7c00: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
7c10: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7c20: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7c30: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
7c40: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
7c50: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
7c60: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
7c70: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
7c80: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
7c90: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
7ca0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7cb0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7cc0: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
7cd0: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
7ce0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
7cf0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
7d00: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
7d10: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
7d20: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
7d30: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
7d40: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
7d50: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
7d60: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
7d70: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
7d80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7d90: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
7da0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
7db0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
7dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
7dd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
7de0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
7df0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
7e00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
7e10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
7e20: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
7e30: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
7e40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
7e50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
7e60: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
7e70: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
7e80: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
7e90: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
7ea0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7eb0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7ec0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
7ed0: 73 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sg;             
7ee0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7ef0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7f00: 28 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 29 20  (UTF-8 encoded) 
7f10: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
7f20: 73 67 31 36 3b 20 20 20 20 20 20 20 20 20 20 20  sg16;           
7f30: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7f40: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7f50: 28 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 29  (UTF-16 encoded)
7f60: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
7f70: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
7f80: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
7f90: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
7fa0: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
7fb0: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
7fc0: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
7fd0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
7fe0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
7ff0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
8000: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
8010: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
8020: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
8030: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
8040: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
8050: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20  ORIZATION.  int 
8060: 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69  (*xAuth)(void*,i
8070: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
8080: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8090: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
80a0: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r*);.           
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
80d0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
80e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
80f0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
8100: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
8110: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
8120: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
8130: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
8140: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8150: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
8160: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
8170: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
8180: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
8190: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
81a0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
81b0: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
81c0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
81d0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
81e0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
81f0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
8200: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8210: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
8220: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
8230: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
8240: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8250: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
8260: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8280: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
8290: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
82a0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
82b0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
82c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
82d0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
82e0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
82f0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
8300: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
8310: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
8320: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
8330: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
8340: 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  */.  int nVTrans
8350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8360: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
8370: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
8380: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
8390: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
83a0: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
83b0: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
83c0: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
83d0: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
83e0: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
83f0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8400: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
8410: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
8420: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8440: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
8450: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
8460: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
8470: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
8480: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
8490: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
84a0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
84b0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
84c0: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
84d0: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
84e0: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
84f0: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
8500: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
8510: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
8520: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
8530: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8540: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8550: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
8560: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
8570: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
8580: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
8590: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
85a0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
85b0: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85d0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
85e0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
85f0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 75 38  actions  */.  u8
8600: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
8610: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
8620: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
8630: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
8640: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 36 34 20  s a TS */.  i64 
8650: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
8660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
8670: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
8680: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
8690: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e 74  action. */.  int
86a0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
86b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
86c0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
86d0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
86e0: 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66  ree() */..#ifdef
86f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
8700: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
8710: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8720: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
8730: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
8740: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
8750: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
8760: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
8770: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
8780: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
8790: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
87a0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
87b0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
87c0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
87d0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
87e0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
87f0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
8800: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
8810: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
8820: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
8830: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
8840: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
8850: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
8860: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
8870: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
8880: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
8890: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
88a0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
88b0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
88c0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
88d0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
88e0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
88f0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
8900: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
8910: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
8920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
8930: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
8940: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
8950: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
8960: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
8970: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8980: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
8990: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
89a0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
89b0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
89c0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
89d0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
89e0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
89f0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
8a00: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
8a10: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
8a20: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
8a30: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  f.};../*.** A ma
8a40: 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20  cro to discover 
8a50: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
8a60: 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23  a database..*/.#
8a70: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28  define ENC(db) (
8a80: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
8a90: 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  hema->enc)../*.*
8aa0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
8ab0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
8ac0: 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  3.flags..*/.#def
8ad0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
8ae0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
8af0: 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0100  /* True to
8b00: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
8b10: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
8b20: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
8b30: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 32 30  anges  0x0000020
8b40: 30 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  0  /* Uncommitte
8b50: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
8b60: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
8b70: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
8b80: 6d 65 73 20 20 20 30 78 30 30 30 30 30 34 30 30  mes   0x00000400
8b90: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
8ba0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
8bb0: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
8bc0: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
8bd0: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 38 30  Names  0x0000080
8be0: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
8bf0: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
8c00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8c10: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
8c20: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43  0x00001000  /* C
8c30: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
8c40: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
8c80: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
8c90: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
8cd0: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
8ce0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
8cf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
8d00: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
8d10: 30 32 30 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  02000  /* Invoke
8d20: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
8d30: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d60: 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75         /*   resu
8d70: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
8d80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8d90: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
8da0: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
8db0: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
8dc0: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
8dd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8de0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
8df0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 44  0x00008000  /* D
8e00: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
8e10: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
8e20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e30: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
8e40: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 4f  0x00010000  /* O
8e50: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
8e60: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
8e70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65  fine SQLITE_NoRe
8e80: 61 64 6c 6f 63 6b 20 20 20 20 20 30 78 30 30 30  adlock     0x000
8e90: 32 30 30 30 30 20 20 2f 2a 20 52 65 61 64 6c 6f  20000  /* Readlo
8ea0: 63 6b 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  cks are omitted 
8eb0: 77 68 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20  when .          
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 2a 2a 20 61 63 63 65 73 73 69 6e 67 20 72 65 61  ** accessing rea
8ef0: 64 2d 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73  d-only databases
8f00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8f10: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
8f20: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
8f30: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
8f40: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
8f50: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8f60: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
8f70: 74 65 64 20 30 78 30 30 38 30 30 30 30 20 20 2f  ted 0x0080000  /
8f80: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
8f90: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
8fa0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
8fb0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 31 30 30  FileFmt  0x00100
8fc0: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
8fd0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
8fe0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
8ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
9000: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 32 30  Sync      0x0020
9010: 30 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0000  /* Use ful
9020: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
9030: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
9040: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
9050: 6c 46 53 79 6e 63 20 20 30 78 30 30 34 30 30 30  lFSync  0x004000
9060: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
9070: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
9080: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
9090: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
90a0: 6f 64 65 20 20 20 30 78 30 30 38 30 30 30 30 30  ode   0x00800000
90b0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
90c0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
90d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
90e0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 31 30  rseOrder   0x010
90f0: 30 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  00000  /* Revers
9100: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
9110: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
9120: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
9130: 73 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20  s    0x02000000 
9140: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
9150: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
9160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9170: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
9180: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 45 6e  x04000000  /* En
9190: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
91a0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
91b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91c0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
91d0: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 45  0x08000000  /* E
91e0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
91f0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
9200: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
9210: 42 75 69 6c 74 69 6e 20 20 30 78 31 30 30 30 30  Builtin  0x10000
9220: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
9230: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
9240: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
9250: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
9260: 73 69 6f 6e 20 20 30 78 32 30 30 30 30 30 30 30  sion  0x20000000
9270: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
9280: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
9290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
92a0: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 34 30  bleTrigger  0x40
92b0: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  000000  /* True 
92c0: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
92d0: 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  rs */../*.** Bit
92e0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
92f0: 2e 66 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  .flags field tha
9300: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
9310: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
9320: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
9330: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
9340: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
9350: 65 72 66 61 63 65 2e 0a 2a 2a 20 54 68 65 73 65  erface..** These
9360: 20 6d 75 73 74 20 62 65 20 74 68 65 20 6c 6f 77   must be the low
9370: 2d 6f 72 64 65 72 20 62 69 74 73 20 6f 66 20 74  -order bits of t
9380: 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  he flags field..
9390: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
93a0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
93b0: 20 30 78 30 31 20 20 20 20 20 20 20 20 2f 2a 20   0x01        /* 
93c0: 44 69 73 61 62 6c 65 20 71 75 65 72 79 20 66 6c  Disable query fl
93d0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
93e0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
93f0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 32 20 20  nCache    0x02  
9400: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
9410: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
9420: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9430: 49 54 45 5f 49 6e 64 65 78 53 6f 72 74 20 20 20  ITE_IndexSort   
9440: 20 20 20 30 78 30 34 20 20 20 20 20 20 20 20 2f     0x04        /
9450: 2a 20 44 69 73 61 62 6c 65 20 69 6e 64 65 78 65  * Disable indexe
9460: 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 2a 2f  s for sorting */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 49 6e 64 65 78 53 65 61 72 63 68 20 20 20 20 30  IndexSearch    0
9490: 78 30 38 20 20 20 20 20 20 20 20 2f 2a 20 44 69  x08        /* Di
94a0: 73 61 62 6c 65 20 69 6e 64 65 78 65 73 20 66 6f  sable indexes fo
94b0: 72 20 73 65 61 72 63 68 69 6e 67 20 2a 2f 0a 23  r searching */.#
94c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
94d0: 64 65 78 43 6f 76 65 72 20 20 20 20 20 30 78 31  dexCover     0x1
94e0: 30 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61  0        /* Disa
94f0: 62 6c 65 20 69 6e 64 65 78 20 63 6f 76 65 72 69  ble index coveri
9500: 6e 67 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  ng table */.#def
9510: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
9520: 42 79 4f 72 64 65 72 20 20 20 30 78 32 30 20 20  ByOrder   0x20  
9530: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
9540: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
9550: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
9560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
9570: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 34 30 20  orOutConst 0x40 
9580: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c         /* Disabl
9590: 65 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20  e factoring out 
95a0: 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 23 64 65  constants */.#de
95b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52  fine SQLITE_IdxR
95c0: 65 61 6c 41 73 49 6e 74 20 20 20 30 78 38 30 20  ealAsInt   0x80 
95d0: 20 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20         /* Store 
95e0: 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69  REAL as INT in i
95f0: 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndices */.#defin
9600: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
9610: 74 4f 70 74 20 20 20 20 30 78 38 30 20 20 20 20  tOpt    0x80    
9620: 20 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20      /* DISTINCT 
9630: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9640: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9650: 4f 70 74 4d 61 73 6b 20 20 20 20 20 20 20 20 30  OptMask        0
9660: 78 66 66 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  xff        /* Ma
9670: 73 6b 20 6f 66 20 61 6c 6c 20 64 69 73 61 62 6c  sk of all disabl
9680: 61 62 6c 65 20 6f 70 74 73 20 2a 2f 0a 0a 2f 2a  able opts */../*
9690: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
96a0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
96b0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
96c0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
96d0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
96e0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
96f0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
9700: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
9710: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
9720: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
9730: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9740: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
9750: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
9760: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
9770: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
9780: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
9790: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
97a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
97b0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
97c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
97d0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
97e0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
97f0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
9800: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9810: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
9820: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
9830: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
9840: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
9850: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9860: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
9870: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
9880: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
9890: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  occurred */../*.
98a0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
98b0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
98c0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
98d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
98e0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
98f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
9900: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
9910: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
9920: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
9930: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
9940: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
9950: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
9960: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
9970: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
9980: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9990: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
99a0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
99b0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
99c0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
99d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
99e0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
99f0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
9a00: 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20  u8 iPrefEnc;    
9a10: 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65       /* Preferre
9a20: 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  d text encoding 
9a30: 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36  (SQLITE_UTF8, 16
9a40: 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75  LE, 16BE) */.  u
9a50: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
9a60: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
9a70: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
9a80: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
9a90: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
9aa0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
9ab0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
9ac0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
9ad0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
9ae0: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
9af0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
9b00: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
9b10: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9b20: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9b30: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
9b40: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
9b50: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
9b60: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9b70: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
9b80: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
9b90: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
9ba0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
9bb0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
9bc0: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
9bd0: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
9be0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
9bf0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
9c00: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
9c10: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
9c20: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
9c30: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
9c40: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
9c50: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
9c60: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
9c70: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
9c80: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
9c90: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
9ca0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
9cb0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
9cc0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
9cd0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
9ce0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
9cf0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
9d00: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
9d10: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
9d20: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
9d30: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
9d40: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
9d50: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
9d60: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
9d70: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
9d80: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
9d90: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
9da0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
9db0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
9dc0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
9dd0: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
9de0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
9df0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
9e00: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
9e10: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
9e20: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
9e30: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
9e40: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
9e50: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
9e60: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
9e70: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
9e80: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
9e90: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
9ea0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
9eb0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
9ec0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
9ed0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
9ee0: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
9ef0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
9f00: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
9f10: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
9f20: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
9f30: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
9f40: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
9f50: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
9f60: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
9f70: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
9f80: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
9f90: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
9fa0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9fb0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
9fc0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
9fd0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
9fe0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
9ff0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
a000: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a010: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
a020: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s.*/.#define SQL
a030: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
a040: 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64 69 64    0x01 /* Candid
a050: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
a060: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
a070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a080: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
a090: 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  02 /* Case-sensi
a0a0: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
a0b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a0c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
a0d0: 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f 2a 20  PHEM    0x04 /* 
a0e0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
a0f0: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
a100: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a110: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
a120: 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  8 /* sqlite3GetF
a130: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
a140: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
a150: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a160: 55 4e 43 5f 50 52 49 56 41 54 45 20 20 30 78 31  UNC_PRIVATE  0x1
a170: 30 20 2f 2a 20 41 6c 6c 6f 77 65 64 20 66 6f 72  0 /* Allowed for
a180: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
a190: 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ly */.#define SQ
a1a0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
a1b0: 20 20 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74     0x20 /* Built
a1c0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
a1d0: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
a1e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a1f0: 41 4c 45 53 43 45 20 30 78 34 30 20 2f 2a 20 42  ALESCE 0x40 /* B
a200: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
a210: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66  () or ifnull() f
a220: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
a230: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
a240: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
a250: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
a260: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
a270: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
a280: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
a290: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
a2a0: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
a2b0: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
a2c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
a2d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a2e0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
a2f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
a300: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
a310: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
a320: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
a330: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
a340: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
a350: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
a360: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
a370: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
a380: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
a390: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
a3a0: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
a3b0: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
a3c0: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
a3d0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
a3e0: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
a3f0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
a400: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
a410: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
a420: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
a430: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
a440: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
a450: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
a460: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
a470: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
a480: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a490: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
a4a0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
a4b0: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
a4c0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
a4d0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
a4e0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
a4f0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
a500: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
a510: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
a520: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
a530: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
a540: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
a550: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
a560: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
a570: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
a580: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
a590: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
a5a0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
a5b0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
a5c0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
a5d0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
a5e0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
a5f0: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
a600: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
a610: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
a620: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
a630: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
a640: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
a650: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
a660: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
a670: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
a680: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
a690: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
a6a0: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
a6b0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
a6c0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
a6d0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
a6e0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
a6f0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
a700: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
a710: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
a720: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
a730: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
a740: 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51  ITE_UTF8, bNC*SQ
a750: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a760: 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  LL, \.   SQLITE_
a770: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
a780: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
a790: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
a7a0: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
a7b0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
a7c0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
a7d0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
a7e0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
a7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
a800: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c  COLL, \.   pArg,
a810: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a820: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a830: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
a840: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
a850: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
a860: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
a870: 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29   flags, (void *)
a880: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
a890: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
a8a0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
a8b0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
a8c0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
a8d0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
a8e0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
a8f0: 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8, nc*SQLITE_F
a900: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a  UNC_NEEDCOLL, \.
a910: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
a920: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
a930: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
a940: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
a950: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
a960: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
a970: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
a980: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
a990: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
a9a0: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
a9b0: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
a9c0: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
a9d0: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
a9e0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
a9f0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
aa00: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
aa10: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
aa20: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
aa30: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
aa40: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
aa50: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
aa80: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
aa90: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
aaa0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aac0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
aad0: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
aae0: 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ions */.  Savepo
aaf0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ab10: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
ab20: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
ab30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
ab40: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
ab50: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
ab60: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
ab70: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
ab80: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
ab90: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
aba0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
abb0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
abc0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
abd0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
abe0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
abf0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
ac00: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
ac10: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
ac20: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
ac30: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
ac40: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
ac50: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
ac60: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
ac70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
ac80: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
ac90: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
aca0: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
acb0: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
acc0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
acd0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
ace0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
acf0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
ad00: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
ad10: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ad30: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
ad40: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
ad50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
ad80: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
ad90: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ada0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
adb0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
adc0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
add0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
ade0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
adf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
ae00: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
ae10: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
ae20: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
ae30: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
ae40: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
ae50: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
ae60: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
ae70: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
ae80: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
ae90: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
aea0: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
aeb0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
aec0: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
aed0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
aee0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
aef0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
af00: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
af10: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
af20: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
af30: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
af40: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
af50: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
af60: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
af70: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
af80: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 54 72  Null;      /* Tr
af90: 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
afa0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
afb0: 61 69 6e 74 20 2a 2f 0a 20 20 75 38 20 69 73 50  aint */.  u8 isP
afc0: 72 69 6d 4b 65 79 3b 20 20 20 20 2f 2a 20 54 72  rimKey;    /* Tr
afd0: 75 65 20 69 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue if this colum
afe0: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
aff0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
b000: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
b010: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
b020: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
b030: 76 61 6c 75 65 73 20 2a 2f 0a 23 69 66 6e 64 65  values */.#ifnde
b040: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
b050: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
b060: 69 73 48 69 64 64 65 6e 3b 20 20 20 20 20 2f 2a  isHidden;     /*
b070: 20 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f   True if this co
b080: 6c 75 6d 6e 20 69 73 20 27 68 69 64 64 65 6e 27  lumn is 'hidden'
b090: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
b0a0: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
b0b0: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
b0c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
b0d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
b0e0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
b0f0: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
b100: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
b110: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
b120: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
b130: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
b140: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
b150: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
b160: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
b170: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 61 79 20  **.** There may 
b180: 74 77 6f 20 73 65 70 61 72 61 74 65 20 69 6d 70  two separate imp
b190: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20  lementations of 
b1a0: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75  the collation fu
b1b0: 6e 63 74 69 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74  nction, one.** t
b1c0: 68 61 74 20 70 72 6f 63 65 73 73 65 73 20 74 65  hat processes te
b1d0: 78 74 20 69 6e 20 55 54 46 2d 38 20 65 6e 63 6f  xt in UTF-8 enco
b1e0: 64 69 6e 67 20 28 43 6f 6c 6c 53 65 71 2e 78 43  ding (CollSeq.xC
b1f0: 6d 70 29 20 61 6e 64 20 61 6e 6f 74 68 65 72 20  mp) and another 
b200: 74 68 61 74 0a 2a 2a 20 70 72 6f 63 65 73 73 65  that.** processe
b210: 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 69  s text encoded i
b220: 6e 20 55 54 46 2d 31 36 20 28 43 6f 6c 6c 53 65  n UTF-16 (CollSe
b230: 71 2e 78 43 6d 70 31 36 29 2c 20 75 73 69 6e 67  q.xCmp16), using
b240: 20 74 68 65 20 6d 61 63 68 69 6e 65 0a 2a 2a 20   the machine.** 
b250: 6e 61 74 69 76 65 20 62 79 74 65 20 6f 72 64 65  native byte orde
b260: 72 2e 20 57 68 65 6e 20 61 20 63 6f 6c 6c 61 74  r. When a collat
b270: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
b280: 69 6e 76 6f 6b 65 64 2c 20 53 51 4c 69 74 65 20  invoked, SQLite 
b290: 73 65 6c 65 63 74 73 0a 2a 2a 20 74 68 65 20 76  selects.** the v
b2a0: 65 72 73 69 6f 6e 20 74 68 61 74 20 77 69 6c 6c  ersion that will
b2b0: 20 72 65 71 75 69 72 65 20 74 68 65 20 6c 65 61   require the lea
b2c0: 73 74 20 65 78 70 65 6e 73 69 76 65 20 65 6e 63  st expensive enc
b2d0: 6f 64 69 6e 67 0a 2a 2a 20 74 72 61 6e 73 6c 61  oding.** transla
b2e0: 74 69 6f 6e 73 2c 20 69 66 20 61 6e 79 2e 0a 2a  tions, if any..*
b2f0: 2a 0a 2a 2a 20 54 68 65 20 43 6f 6c 6c 53 65 71  *.** The CollSeq
b300: 2e 70 55 73 65 72 20 6d 65 6d 62 65 72 20 76 61  .pUser member va
b310: 72 69 61 62 6c 65 20 69 73 20 61 6e 20 65 78 74  riable is an ext
b320: 72 61 20 70 61 72 61 6d 65 74 65 72 20 74 68 61  ra parameter tha
b330: 74 20 70 61 73 73 65 64 20 69 6e 0a 2a 2a 20 61  t passed in.** a
b340: 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
b350: 6d 65 6e 74 20 74 6f 20 74 68 65 20 55 54 46 2d  ment to the UTF-
b360: 38 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  8 comparison fun
b370: 63 74 69 6f 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20  ction, xCmp..** 
b380: 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72 31 36 20  CollSeq.pUser16 
b390: 69 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  is the equivalen
b3a0: 74 20 66 6f 72 20 74 68 65 20 55 54 46 2d 31 36  t for the UTF-16
b3b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
b3c0: 74 69 6f 6e 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e  tion,.** xCmp16.
b3d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 43  .**.** If both C
b3e0: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 61 6e 64 20  ollSeq.xCmp and 
b3f0: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31 36 20 61  CollSeq.xCmp16 a
b400: 72 65 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  re NULL, it mean
b410: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
b420: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b430: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
b440: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
b450: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
b460: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b470: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
b480: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
b490: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
b4a0: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
b4b0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
b4c0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
b4d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
b4e0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
b4f0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
b500: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
b510: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
b520: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
b530: 75 38 20 74 79 70 65 3b 20 20 20 20 20 20 20 20  u8 type;        
b540: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
b550: 74 68 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f  the SQLITE_COLL_
b560: 2e 2e 2e 20 76 61 6c 75 65 73 20 62 65 6c 6f 77  ... values below
b570: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
b580: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
b590: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
b5a0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
b5b0: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
b5c0: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
b5d0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
b5e0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
b5f0: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
b600: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
b610: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
b620: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
b630: 6f 66 20 43 6f 6c 6c 53 65 71 2e 74 79 70 65 3a  of CollSeq.type:
b640: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b650: 54 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 20 20  TE_COLL_BINARY  
b660: 31 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c  1  /* The defaul
b670: 74 20 6d 65 6d 63 6d 70 28 29 20 63 6f 6c 6c 61  t memcmp() colla
b680: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f  ting sequence */
b690: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b6a0: 43 4f 4c 4c 5f 4e 4f 43 41 53 45 20 20 32 20 20  COLL_NOCASE  2  
b6b0: 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d 69 6e 20  /* The built-in 
b6c0: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67  NOCASE collating
b6d0: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65   sequence */.#de
b6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c  fine SQLITE_COLL
b6f0: 5f 52 45 56 45 52 53 45 20 33 20 20 2f 2a 20 54  _REVERSE 3  /* T
b700: 68 65 20 62 75 69 6c 74 2d 69 6e 20 52 45 56 45  he built-in REVE
b710: 52 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  RSE collating se
b720: 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  quence */.#defin
b730: 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 55 53  e SQLITE_COLL_US
b740: 45 52 20 20 20 20 30 20 20 2f 2a 20 41 6e 79 20  ER    0  /* Any 
b750: 6f 74 68 65 72 20 75 73 65 72 2d 64 65 66 69 6e  other user-defin
b760: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ed collating seq
b770: 75 65 6e 63 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  uence */../*.** 
b780: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
b790: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
b7a0: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
b7b0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
b7c0: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
b7d0: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
b7e0: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
b7f0: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
b800: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
b810: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
b820: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  r */../*.** Colu
b830: 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
b840: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
b850: 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
b860: 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
b870: 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
b880: 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
b890: 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
b8a0: 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
b8b0: 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
b8c0: 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
b8d0: 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
b8e0: 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
b8f0: 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
b900: 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
b910: 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  y.  .**.** But r
b920: 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
b930: 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
b940: 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e   begin with 'a'.
b950: 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
b960: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
b970: 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
b980: 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
b990: 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
b9a0: 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
b9b0: 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
b9c0: 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
b9d0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
b9e0: 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
b9f0: 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
ba00: 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
ba10: 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
ba20: 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
ba30: 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
ba40: 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  gle comparison..
ba50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba60: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
ba70: 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  a'.#define SQLIT
ba80: 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27  E_AFF_NONE     '
ba90: 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  b'.#define SQLIT
baa0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
bab0: 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  c'.#define SQLIT
bac0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
bad0: 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  d'.#define SQLIT
bae0: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
baf0: 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  e'..#define sqli
bb00: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
bb10: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
bb20: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
bb30: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
bb40: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
bb50: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
bb60: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
bb70: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
bb80: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
bb90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bba0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36  AFF_MASK     0x6
bbb0: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
bbc0: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
bbd0: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
bbe0: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
bbf0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
bc00: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
bc10: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  y..*/.#define SQ
bc20: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
bc30: 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73    0x08  /* jumps
bc40: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
bc50: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
bc60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
bc70: 52 45 50 32 20 20 20 20 20 20 30 78 31 30 20 20  REP2      0x10  
bc80: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
bc90: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
bca0: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
bcb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
bcc0: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
bcd0: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
bce0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
bcf0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
bd00: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
bd10: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
bd20: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
bd30: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
bd40: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
bd50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
bd60: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
bd70: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
bd80: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
bd90: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
bda0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
bdb0: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
bdc0: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
bdd0: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
bde0: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
bdf0: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
be00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
be10: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
be20: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
be30: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
be40: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
be50: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
be60: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
be70: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
be80: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
be90: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
bea0: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
beb0: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
bec0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
bed0: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
bee0: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
bef0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
bf00: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
bf10: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
bf20: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
bf30: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
bf40: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
bf50: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
bf60: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
bf70: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
bf80: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
bf90: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
bfa0: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
bfb0: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
bfc0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
bfd0: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
bfe0: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
bff0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
c000: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
c010: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
c020: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
c030: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
c040: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
c050: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
c060: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
c070: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
c080: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
c090: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
c0a0: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
c0b0: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
c0c0: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
c0d0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
c0e0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
c0f0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
c100: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
c110: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
c120: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
c130: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
c140: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
c150: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
c160: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
c170: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
c180: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
c190: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
c1a0: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
c1b0: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
c1c0: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
c1d0: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
c1e0: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
c1f0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
c200: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
c210: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
c220: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
c230: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
c240: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
c250: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
c260: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
c270: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
c280: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
c290: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
c2a0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c2b0: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
c2c0: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
c2d0: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
c2e0: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
c2f0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
c300: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
c310: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
c320: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
c330: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
c340: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
c350: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
c360: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
c370: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
c380: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
c390: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
c3a0: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
c3b0: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
c3c0: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
c3d0: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
c3e0: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
c3f0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
c400: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
c410: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
c420: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
c430: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c440: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
c450: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
c460: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
c470: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
c480: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
c490: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
c4a0: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
c4b0: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
c4c0: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
c4d0: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
c4e0: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
c4f0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
c500: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
c510: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
c520: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
c530: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
c540: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
c550: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
c560: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
c570: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
c580: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
c590: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
c5a0: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
c5b0: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c5c0: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
c5d0: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
c5e0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
c5f0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
c600: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
c610: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
c620: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
c630: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
c640: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
c650: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
c660: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
c670: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
c680: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
c690: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
c6a0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
c6b0: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
c6c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
c6d0: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
c6e0: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
c6f0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
c700: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
c710: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
c720: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
c730: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
c740: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
c750: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
c780: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
c790: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
c7a0: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c7c0: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
c7d0: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
c7e0: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
c7f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
c800: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
c810: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
c820: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
c830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
c840: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
c850: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
c860: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
c870: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
c880: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
c890: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
c8a0: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
c8b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
c8c0: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
c8d0: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
c8e0: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
c8f0: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
c900: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
c910: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
c920: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
c930: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
c940: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
c950: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
c960: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
c970: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
c980: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
c990: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
c9a0: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
c9b0: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
c9c0: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
c9d0: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
c9e0: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
c9f0: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
ca00: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
ca10: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
ca20: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
ca30: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
ca40: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
ca50: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
ca60: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
ca70: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
ca80: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
ca90: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
caa0: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
cab0: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
cac0: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
cad0: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
cae0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
caf0: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
cb00: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
cb10: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
cb20: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
cb30: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
cb40: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
cb50: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
cb60: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
cb70: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
cb80: 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61  he table.  TF_Ha
cb90: 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73  sPrimaryKey is s
cba0: 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  et if.** the tab
cbb0: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
cbc0: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
cbd0: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
cbe0: 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69  .** Table.tnum i
cbf0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
cc00: 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42  r for the root B
cc10: 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65  Tree page of the
cc20: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a   table in the.**
cc30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
cc40: 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73   If Table.iDb is
cc50: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
cc60: 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
cc70: 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73   backend.** in s
cc80: 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20  qlite.aDb[].  0 
cc90: 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  is for the main 
cca0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69  database and 1 i
ccb0: 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74  s for the file t
ccc0: 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d  hat.** holds tem
ccd0: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
cce0: 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54  d indices.  If T
ccf0: 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73  F_Ephemeral is s
cd00: 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74  et.** then the t
cd10: 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69  able is stored i
cd20: 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  n a file that is
cd30: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
cd40: 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74  eleted.** when t
cd50: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74  he VDBE cursor t
cd60: 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  o the table is c
cd70: 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20  losed.  In this 
cd80: 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20  case Table.tnum 
cd90: 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20  .** refers VDBE 
cda0: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68  cursor number th
cdb0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62  at holds the tab
cdc0: 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20  le open, not to 
cdd0: 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  the root.** page
cde0: 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69   number.  Transi
cdf0: 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75  ent tables are u
ce00: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
ce10: 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20  results of a.** 
ce20: 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61  sub-query that a
ce30: 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f  ppears instead o
ce40: 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e  f a real table n
ce50: 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ame in the FROM 
ce60: 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20  clause .** of a 
ce70: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
ce80: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
ce90: 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
cea0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
ceb0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
cec0: 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 69 6e 74  or view */.  int
ced0: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
cee0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
cef0: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
cf00: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
cf10: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 6e  mary key */.  in
cf20: 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
cf30: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cf40: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
cf50: 74 61 62 6c 65 20 2a 2f 0a 20 20 43 6f 6c 75 6d  table */.  Colum
cf60: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
cf70: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
cf80: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
cf90: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
cfa0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
cfb0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
cfc0: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
cfd0: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
cfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
cff0: 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f  ot BTree node fo
d000: 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65  r this table (se
d010: 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f  e note above) */
d020: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
d030: 73 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  st;     /* Estim
d040: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
d050: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
d060: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
d070: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
d080: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
d090: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
d0a0: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
d0b0: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
d0c0: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
d0d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d0e0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
d0f0: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
d100: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
d110: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
d120: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
d130: 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
d140: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
d150: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
d160: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
d170: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 20 20  t on iPKey */.  
d180: 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
d190: 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
d1a0: 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
d1b0: 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
d1c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
d1d0: 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
d1e0: 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
d1f0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
d200: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
d210: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d220: 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78  _OMIT_CHECK.  Ex
d230: 70 72 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 20  pr *pCheck;     
d240: 20 20 20 2f 2a 20 54 68 65 20 41 4e 44 20 6f 66     /* The AND of
d250: 20 61 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   all CHECK const
d260: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
d270: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d280: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
d290: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
d2a0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
d2b0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
d2c0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
d2d0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
d2e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d2f0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d300: 41 42 4c 45 0a 20 20 56 54 61 62 6c 65 20 2a 70  ABLE.  VTable *p
d310: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
d320: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
d330: 6a 65 63 74 73 2e 20 2a 2f 0a 20 20 69 6e 74 20  jects. */.  int 
d340: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
d350: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
d360: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
d370: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
d380: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
d390: 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d  /* Text of all m
d3a0: 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20  odule args. [0] 
d3b0: 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a  is module name *
d3c0: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
d3d0: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
d3e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
d3f0: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
d400: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
d410: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
d420: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
d430: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
d440: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
d450: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
d460: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
d470: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
d480: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
d490: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
d4a0: 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e  r Tabe.tabFlags.
d4b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
d4c0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
d4d0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
d4e0: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
d4f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
d500: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
d510: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
d520: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
d530: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
d540: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
d550: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
d560: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
d570: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
d580: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
d590: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
d5a0: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
d5b0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
d5c0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
d5d0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
d5e0: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
d5f0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
d600: 6e 65 20 54 46 5f 4e 65 65 64 4d 65 74 61 64 61  ne TF_NeedMetada
d610: 74 61 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  ta    0x20    /*
d620: 20 61 43 6f 6c 5b 5d 2e 7a 54 79 70 65 20 61 6e   aCol[].zType an
d630: 64 20 61 43 6f 6c 5b 5d 2e 70 43 6f 6c 6c 20 6d  d aCol[].pColl m
d640: 69 73 73 69 6e 67 20 2a 2f 0a 0a 0a 0a 2f 2a 0a  issing */..../*.
d650: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
d660: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
d670: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
d680: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
d690: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
d6a0: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
d6b0: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
d6c0: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
d6d0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
d6e0: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
d6f0: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
d700: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d710: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d720: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
d730: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d740: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
d750: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
d760: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
d770: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
d780: 58 29 2d 3e 69 73 48 69 64 64 65 6e 29 0a 23 65  X)->isHidden).#e
d790: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
d7a0: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d7b0: 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
d7c0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
d7d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
d7e0: 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
d7f0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
d800: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
d810: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
d820: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
d830: 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
d840: 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
d850: 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
d860: 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
d870: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
d880: 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
d890: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
d8a0: 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
d8b0: 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
d8c0: 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
d8d0: 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
d8e0: 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
d8f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d900: 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
d910: 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
d920: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
d930: 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
d940: 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
d950: 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
d960: 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
d970: 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
d980: 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
d990: 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
d9a0: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
d9b0: 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
d9c0: 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
d9d0: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
d9e0: 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20 45 61   "ex2"..**.** Ea
d9f0: 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
da00: 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
da10: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
da20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
da30: 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
da40: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
da50: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
da60: 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
da70: 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
da80: 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
da90: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
daa0: 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
dab0: 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
dac0: 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2f 0a  not checked..*/.
dad0: 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
dae0: 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
daf0: 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
db00: 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
db10: 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
db20: 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
db30: 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
db40: 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20  /* Next foreign 
db50: 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  key in pFrom */.
db60: 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
db70: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
db80: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
db90: 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
dba0: 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
dbb0: 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
dbc0: 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e   /* Next foreign
dbd0: 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61   key on table na
dbe0: 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46 4b 65  med zTo */.  FKe
dbf0: 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
dc00: 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72 65 69  * Previous forei
dc10: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
dc20: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 69  named zTo */.  i
dc30: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
dc40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
dc50: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
dc60: 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
dc70: 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
dc80: 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
dc90: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
dca0: 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
dcb0: 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
dcc0: 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
dcd0: 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
dce0: 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
dcf0: 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
dd00: 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
dd10: 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
dd20: 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
dd30: 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65 72 73  2];  /* Triggers
dd40: 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
dd50: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
dd60: 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 2f 2a  ct sColMap {  /*
dd70: 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
dd80: 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
dd90: 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
dda0: 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
ddb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
ddc0: 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
ddd0: 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
dde0: 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *zCol;        /
ddf0: 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
de00: 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30 20 75   in zTo.  If 0 u
de10: 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
de20: 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
de30: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
de40: 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
de50: 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a 2f 0a  Col column s */.
de60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
de70: 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
de80: 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
de90: 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
dea0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
deb0: 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
dec0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
ded0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
dee0: 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
def0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
df00: 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
df10: 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
df20: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
df30: 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
df40: 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
df50: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
df60: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
df70: 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
df80: 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
df90: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
dfa0: 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
dfb0: 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
dfc0: 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
dfd0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
dfe0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
dff0: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e000: 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
e010: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
e020: 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
e030: 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
e040: 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
e050: 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
e060: 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
e070: 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
e080: 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
e090: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
e0a0: 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
e0b0: 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
e0c0: 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
e0d0: 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
e0e0: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
e0f0: 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
e100: 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
e110: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
e120: 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
e130: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
e140: 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
e150: 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
e160: 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
e170: 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
e180: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
e190: 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
e1a0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
e1b0: 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
e1c0: 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
e1d0: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
e1e0: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
e1f0: 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
e200: 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
e210: 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
e220: 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
e230: 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
e240: 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
e250: 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
e260: 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
e270: 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
e280: 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
e290: 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
e2a0: 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
e2b0: 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
e2c0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
e2d0: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
e2e0: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
e2f0: 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
e300: 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
e310: 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
e320: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
e330: 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
e340: 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
e350: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
e360: 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
e370: 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
e380: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
e390: 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
e3a0: 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
e3b0: 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
e3c0: 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
e3d0: 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
e3e0: 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
e3f0: 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
e400: 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
e410: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
e420: 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
e430: 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
e440: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
e450: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
e460: 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
e470: 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
e480: 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
e490: 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
e4a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
e4b0: 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
e4c0: 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
e4d0: 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
e4e0: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
e4f0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
e500: 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
e510: 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
e520: 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
e530: 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
e540: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
e550: 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
e560: 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
e570: 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
e580: 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
e590: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
e5a0: 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
e5b0: 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
e5c0: 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
e5d0: 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
e5e0: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
e5f0: 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
e600: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
e610: 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
e620: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
e630: 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
e640: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
e650: 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
e660: 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
e670: 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
e680: 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
e690: 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
e6a0: 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 39 39  e OE_Default  99
e6b0: 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
e6c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
e6d0: 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
e6e0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
e6f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
e700: 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
e710: 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
e720: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
e730: 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
e740: 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
e750: 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
e760: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
e770: 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
e780: 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  keys..*/.struct 
e790: 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69  KeyInfo {.  sqli
e7a0: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
e7b0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
e7c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
e7d0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
e7e0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
e7f0: 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
e800: 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
e810: 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
e820: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
e830: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
e840: 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f  es in aColl[] */
e850: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
e860: 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
e870: 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
e880: 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20 4e 55  lumn.  May be NU
e890: 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  LL */.  CollSeq 
e8a0: 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
e8b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e8c0: 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
e8d0: 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
e8e0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
e8f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e900: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
e910: 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
e920: 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
e930: 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
e940: 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
e950: 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
e960: 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
e970: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
e980: 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
e990: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
e9a0: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
e9b0: 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
e9c0: 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
e9d0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
e9e0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
e9f0: 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
ea00: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
ea10: 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
ea20: 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
ea30: 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
ea40: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
ea50: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
ea60: 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
ea70: 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
ea80: 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
ea90: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
eaa0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
eab0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
eac0: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
ead0: 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
eae0: 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
eaf0: 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
eb00: 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75   fields..*/.stru
eb10: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
eb20: 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
eb30: 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
eb40: 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
eb50: 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
eb60: 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  n */.  u16 nFiel
eb70: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
eb80: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
eb90: 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
eba0: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
ebb0: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73      /* Boolean s
ebc0: 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b  ettings.  UNPACK
ebd0: 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a  ED_... below */.
ebe0: 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
ebf0: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
ec00: 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
ec10: 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d  _SEARCH */.  Mem
ec20: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
ec30: 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b   /* Values */.};
ec40: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
ec50: 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b  values of Unpack
ec60: 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a  edRecord.flags.*
ec70: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
ec80: 45 44 5f 4e 45 45 44 5f 46 52 45 45 20 20 20 20  ED_NEED_FREE    
ec90: 20 30 78 30 30 30 31 20 20 2f 2a 20 4d 65 6d 6f   0x0001  /* Memo
eca0: 72 79 20 69 73 20 66 72 6f 6d 20 73 71 6c 69 74  ry is from sqlit
ecb0: 65 33 4d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  e3Malloc() */.#d
ecc0: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 4e  efine UNPACKED_N
ecd0: 45 45 44 5f 44 45 53 54 52 4f 59 20 20 30 78 30  EED_DESTROY  0x0
ece0: 30 30 32 20 20 2f 2a 20 61 70 4d 65 6d 5b 5d 73  002  /* apMem[]s
ecf0: 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 64   should all be d
ed00: 65 73 74 72 6f 79 65 64 20 2a 2f 0a 23 64 65 66  estroyed */.#def
ed10: 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e  ine UNPACKED_IGN
ed20: 4f 52 45 5f 52 4f 57 49 44 20 20 30 78 30 30 30  ORE_ROWID  0x000
ed30: 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 72 61  4  /* Ignore tra
ed40: 69 6c 69 6e 67 20 72 6f 77 69 64 20 6f 6e 20 6b  iling rowid on k
ed50: 65 79 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ey1 */.#define U
ed60: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
ed70: 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
ed80: 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61   Make this key a
ed90: 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72  n epsilon larger
eda0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
edb0: 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
edc0: 48 20 20 30 78 30 30 31 30 20 20 2f 2a 20 41 20  H  0x0010  /* A 
edd0: 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20  prefix match is 
ede0: 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f  considered OK */
edf0: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
ee00: 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20  D_PREFIX_SEARCH 
ee10: 30 78 30 30 32 30 20 20 2f 2a 20 41 20 70 72 65  0x0020  /* A pre
ee20: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
ee30: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 0a 2f  sidered OK */../
ee40: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
ee50: 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
ee60: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
ee70: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
ee80: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ee90: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
eea0: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
eeb0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
eec0: 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
eed0: 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
eee0: 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
eef0: 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
ef00: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
ef10: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
ef20: 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
ef30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
ef40: 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
ef50: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
ef60: 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
ef70: 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
ef80: 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
ef90: 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
efa0: 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
efb0: 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
efc0: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
efd0: 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
efe0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
eff0: 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
f000: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
f010: 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
f020: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
f030: 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
f040: 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
f050: 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
f060: 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
f070: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
f080: 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
f090: 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
f0a0: 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
f0b0: 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
f0c0: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
f0d0: 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
f0e0: 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
f0f0: 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
f100: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
f110: 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
f120: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
f130: 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
f140: 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
f150: 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
f160: 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
f170: 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
f180: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
f190: 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
f1a0: 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
f1b0: 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
f1c0: 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
f1d0: 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
f1e0: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
f1f0: 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
f200: 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
f210: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
f220: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
f230: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
f240: 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
f250: 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
f260: 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
f270: 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
f280: 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
f290: 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
f2a0: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
f2b0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
f2c0: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
f2d0: 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
f2e0: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
f2f0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f300: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
f310: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f320: 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
f330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
f340: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
f350: 6c 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  le used by this 
f360: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a  index */.  int *
f370: 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57  aiColumn;   /* W
f380: 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
f390: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
f3a0: 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
f3b0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
f3c0: 6f 77 45 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74  owEst; /* Result
f3d0: 20 6f 66 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74   of ANALYZE: Est
f3e0: 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
f3f0: 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
f400: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
f410: 65 3b 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20  e;   /* The SQL 
f420: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
f430: 78 65 64 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  xed */.  int tnu
f440: 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67  m;        /* Pag
f450: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
f460: 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
f470: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
f480: 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
f490: 3b 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ;      /* OE_Abo
f4a0: 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
f4b0: 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
f4c0: 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75  _None */.  u8 au
f4d0: 74 6f 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54  toIndex;    /* T
f4e0: 72 75 65 20 69 66 20 69 73 20 61 75 74 6f 6d 61  rue if is automa
f4f0: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
f500: 28 65 78 3a 20 62 79 20 55 4e 49 51 55 45 29 20  (ex: by UNIQUE) 
f510: 2a 2f 0a 20 20 75 38 20 62 55 6e 6f 72 64 65 72  */.  u8 bUnorder
f520: 65 64 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  ed;   /* Use thi
f530: 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
f540: 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
f550: 79 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  y */.  char *zCo
f560: 6c 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69 6e  lAff;   /* Strin
f570: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f580: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f590: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
f5a0: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  x *pNext;    /* 
f5b0: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
f5c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f5d0: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
f5e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f5f0: 6d 61 3b 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f  ma; /* Schema co
f600: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
f610: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
f620: 72 74 4f 72 64 65 72 3b 20 20 2f 2a 20 41 72 72  rtOrder;  /* Arr
f630: 61 79 20 6f 66 20 73 69 7a 65 20 49 6e 64 65 78  ay of size Index
f640: 2e 6e 43 6f 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d  .nColumn. True==
f650: 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
f660: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
f670: 6f 6c 6c 3b 20 20 20 2f 2a 20 41 72 72 61 79 20  oll;   /* Array 
f680: 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
f690: 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
f6a0: 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
f6b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
f6c0: 41 54 33 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT3.  int nSampl
f6d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
f6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
f6f0: 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
f700: 5d 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61  ] */.  tRowcnt a
f710: 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 20 20  vgEq;           
f720: 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
f730: 61 6c 75 65 20 66 6f 72 20 6b 65 79 20 76 61 6c  alue for key val
f740: 75 65 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  ues not in aSamp
f750: 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
f760: 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
f770: 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
f780: 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
f790: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
f7a0: 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
f7b0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
f7c0: 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
f7d0: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
f7e0: 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
f7f0: 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
f800: 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
f810: 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
f820: 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
f830: 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
f840: 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
f850: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f860: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
f870: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
f880: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
f890: 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
f8a0: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
f8b0: 20 69 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20   is SQLITE_TEXT 
f8c0: 6f 72 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a  or SQLITE_BLOB *
f8d0: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20  /.    double r; 
f8e0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69        /* Value i
f8f0: 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54  f eType is SQLIT
f900: 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69  E_FLOAT */.    i
f910: 36 34 20 69 3b 20 20 20 20 20 20 20 20 20 20 2f  64 i;          /
f920: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
f930: 20 69 73 20 53 51 4c 49 54 45 5f 49 4e 54 45 47   is SQLITE_INTEG
f940: 45 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75  ER */.  } u;.  u
f950: 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
f960: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c   /* SQLITE_NULL,
f970: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20   SQLITE_INTEGER 
f980: 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e  ... etc. */.  in
f990: 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
f9a0: 2f 2a 20 53 69 7a 65 20 69 6e 20 62 79 74 65 20  /* Size in byte 
f9b0: 6f 66 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e  of text or blob.
f9c0: 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45   */.  tRowcnt nE
f9d0: 71 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20  q;      /* Est. 
f9e0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
f9f0: 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
fa00: 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
fa10: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74  */.  tRowcnt nLt
fa20: 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  ;      /* Est. n
fa30: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
fa40: 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
fa50: 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
fa60: 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44   */.  tRowcnt nD
fa70: 4c 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 2e 20  Lt;     /* Est. 
fa80: 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
fa90: 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
faa0: 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
fab0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
fac0: 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
fad0: 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
fae0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
faf0: 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
fb00: 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
fb10: 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
fb20: 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
fb30: 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
fb40: 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
fb50: 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
fb60: 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
fb70: 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
fb80: 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
fb90: 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
fba0: 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
fbb0: 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
fbc0: 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
fbd0: 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
fbe0: 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
fbf0: 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
fc00: 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
fc10: 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
fc20: 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
fc30: 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
fc40: 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
fc50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
fc60: 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
fc70: 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
fc80: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
fc90: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
fca0: 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
fcb0: 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
fcc0: 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
fcd0: 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
fce0: 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
fcf0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
fd00: 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
fd10: 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
fd20: 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
fd30: 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
fd40: 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
fd50: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
fd60: 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
fd70: 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
fd80: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
fd90: 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
fda0: 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
fdb0: 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
fdc0: 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
fdd0: 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
fde0: 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
fdf0: 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
fe00: 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
fe10: 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
fe20: 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
fe30: 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
fe40: 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
fe50: 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
fe60: 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
fe70: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
fe80: 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
fe90: 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
fea0: 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
feb0: 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
fec0: 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
fed0: 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
fee0: 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
fef0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
ff00: 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
ff10: 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
ff20: 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
ff50: 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
ff60: 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
ff70: 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
ff80: 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
ff90: 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
ffa0: 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
ffb0: 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
ffc0: 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffe0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
fff0: 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
10000 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
10010 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
10020 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
10030 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
10040 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
10050 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
10060 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
10070 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
10080 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
10090 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
100a0 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
100b0 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  lause */.  int n
100c0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
100d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
100e0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
100f0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10100 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
10110 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
10120 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
10130 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
10140 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
10150 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
10160 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
10170 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
10180 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
10190 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
101a0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
101b0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
101c0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
101d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
101e0 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
101f0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
10200 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
10210 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
10220 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
10230 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
10240 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
10250 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
10260 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
10270 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
10280 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
10290 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
102a0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
102b0 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
102c0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
102d0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
102e0 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
102f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10300 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
10310 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
10320 6e 74 20 6e 43 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b  nt nColumnAlloc;
10330 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10340 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
10350 74 65 64 20 66 6f 72 20 61 43 6f 6c 5b 5d 20 2a  ted for aCol[] *
10360 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
10370 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
10380 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10390 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
103a0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
103b0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
103c0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
103d0 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
103e0 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
103f0 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
10400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10410 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
10420 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10430 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
10440 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
10450 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
10460 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
10470 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
10480 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10490 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
104a0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
104b0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
104c0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
104d0 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
104e0 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
104f0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
10500 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10520 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10530 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10540 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
10550 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
10560 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
10570 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
10580 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
10590 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
105a0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
105b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
105c0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
105d0 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20   in aFunc[] */. 
105e0 20 69 6e 74 20 6e 46 75 6e 63 41 6c 6c 6f 63 3b   int nFuncAlloc;
105f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10600 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
10610 63 61 74 65 64 20 66 6f 72 20 61 46 75 6e 63 5b  cated for aFunc[
10620 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
10630 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
10640 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
10650 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
10660 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10670 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10680 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10690 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
106a0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
106b0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
106c0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
106d0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
106e0 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
106f0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
10700 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
10710 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
10720 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
10730 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
10740 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
10750 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
10760 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10770 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
10780 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
10790 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
107a0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
107b0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
107c0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
107d0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
107e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
107f0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
10800 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
10810 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
10820 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
10830 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
10840 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
10850 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
10860 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
10870 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
10880 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
10890 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
108a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
108b0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
108c0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
108d0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
108e0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
108f0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
10900 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
10910 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
10920 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
10930 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
10940 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
10950 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
10960 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
10970 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
10980 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
10990 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
109a0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
109b0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
109c0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
109d0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
109e0 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
109f0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
10a00 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
10a10 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
10a20 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
10a30 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10a40 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
10a50 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
10a60 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
10a70 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
10a80 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
10a90 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
10aa0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
10ab0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
10ac0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
10ad0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
10ae0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
10af0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10b00 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
10b10 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
10b20 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
10b30 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10b40 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
10b50 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
10b60 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10b70 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
10b80 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
10b90 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
10ba0 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
10bb0 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
10bc0 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
10bd0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
10be0 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
10bf0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
10c00 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
10c10 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
10c20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
10c30 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
10c40 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10c50 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
10c60 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
10c70 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
10c80 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10c90 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
10ca0 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
10cb0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10cc0 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
10cd0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
10ce0 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
10cf0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
10d00 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
10d10 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
10d20 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
10d30 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
10d40 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
10d50 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
10d60 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10d70 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
10d80 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
10d90 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
10da0 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
10db0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
10dc0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
10dd0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
10de0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
10df0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
10e00 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
10e10 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
10e20 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
10e30 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
10e40 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
10e50 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
10e60 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
10e70 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
10e80 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
10e90 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
10ea0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
10eb0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
10ec0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
10ed0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
10ee0 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
10ef0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
10f00 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
10f10 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
10f20 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
10f30 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
10f40 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
10f50 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
10f60 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
10f70 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
10f80 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
10f90 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10fa0 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
10fb0 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
10fc0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
10fd0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
10fe0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
10ff0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
11000 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
11010 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
11020 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
11030 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
11040 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11050 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
11060 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
11070 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
11080 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
11090 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
110a0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
110b0 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
110c0 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
110d0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
110e0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
110f0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
11100 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
11110 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
11120 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
11130 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
11140 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
11150 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
11160 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
11170 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
11180 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
11190 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
111a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
111b0 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
111c0 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
111d0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
111e0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
111f0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
11200 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
11210 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
11220 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
11230 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
11240 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
11250 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
11260 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
11270 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
11280 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
11290 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
112a0 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
112b0 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
112c0 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
112d0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
112e0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
112f0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
11300 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
11310 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
11320 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
11330 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
11340 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
11350 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
11360 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11370 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11380 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11390 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
113a0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
113b0 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
113c0 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
113d0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
113e0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
113f0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
11400 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
11410 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
11420 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
11430 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
11440 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
11450 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
11460 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11470 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11480 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11490 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
114a0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
114b0 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
114c0 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
114d0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
114e0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
114f0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
11500 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
11510 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
11520 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
11530 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
11540 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
11550 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11570 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11580 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11590 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
115a0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
115b0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
115c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
115d0 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
115e0 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  umn */.  u16 fla
115f0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
11600 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
11610 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
11620 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
11630 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
11640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
11650 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
11660 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11670 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11680 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11690 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
116a0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
116b0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
116c0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
116d0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
116e0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
116f0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
11700 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
11710 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
11720 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
11730 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
11740 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
11750 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
11760 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
11770 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
11780 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
11790 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
117a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
117e0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
117f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
11800 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
11810 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
11820 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
11830 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
11840 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
11850 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75  pList;     /* Fu
11860 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
11870 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49   or in "<expr> I
11880 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20  N (<expr-list)" 
11890 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
118a0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55  Select;     /* U
118b0 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  sed for sub-sele
118c0 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20  cts and "<expr> 
118d0 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a  IN (<select>)" *
118e0 2f 0a 20 20 7d 20 78 3b 0a 20 20 43 6f 6c 6c 53  /.  } x;.  CollS
118f0 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20  eq *pColl;      
11900 20 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69    /* The collati
11910 6f 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  on type of the c
11920 6f 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 0a 20  olumn or 0 */.. 
11930 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
11940 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
11950 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
11960 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
11970 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
11980 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
11990 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
119a0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
119b0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
119c0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
119d0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
119e0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
119f0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
11a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
11a40 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
11a50 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
11a60 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
11a70 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
11a80 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
11ab0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
11ac0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11ae0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
11af0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a   new, 0 -> old *
11b00 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
11b10 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
11b20 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
11b30 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
11b40 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11b60 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
11b70 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
11b80 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
11b90 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
11ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11bb0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
11bc0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
11bd0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
11be0 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
11bf0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
11c00 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
11c10 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
11c20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61  join */.  u8 fla
11c30 67 73 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  gs2;            
11c40 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f   /* Second set o
11c50 66 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e  f flags.  EP2_..
11c60 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  . */.  u8 op2;  
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c80 20 49 66 20 61 20 54 4b 5f 52 45 47 49 53 54 45   If a TK_REGISTE
11c90 52 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  R, the original 
11ca0 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
11cb0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
11cc0 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
11cd0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
11ce0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
11cf0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
11d00 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
11d10 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
11d20 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
11d30 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66  ressions. */.#if
11d40 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
11d50 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
11d60 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
11d70 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
11d80 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
11d90 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
11da0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
11db0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
11dc0 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
11dd0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
11de0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
11df0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
11e00 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20  omJoin   0x0001 
11e10 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69   /* Originated i
11e20 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  n ON or USING cl
11e30 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
11e40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
11e50 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20          0x0002  
11e60 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
11e70 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
11e80 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
11e90 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
11ea0 65 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ed   0x0004  /* 
11eb0 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
11ec0 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
11ed0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
11ee0 45 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30  Error      0x000
11ef0 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  8  /* Expression
11f00 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
11f10 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
11f20 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
11f30 6e 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a  nct   0x0010  /*
11f40 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
11f50 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
11f60 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
11f70 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
11f80 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53  t  0x0020  /* pS
11f90 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
11fa0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
11fb0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
11fc0 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34  DblQuoted  0x004
11fd0 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  0  /* token.z wa
11fe0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
11ff0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
12000 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30   EP_InfixFunc  0
12010 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66  x0080  /* True f
12020 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
12030 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
12040 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
12050 20 45 50 5f 45 78 70 43 6f 6c 6c 61 74 65 20 30   EP_ExpCollate 0
12060 78 30 31 30 30 20 20 2f 2a 20 43 6f 6c 6c 61 74  x0100  /* Collat
12070 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73 70 65  ing sequence spe
12080 63 69 66 69 65 64 20 65 78 70 6c 69 63 69 74 6c  cified explicitl
12090 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
120a0 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30  FixedDest  0x020
120b0 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65  0  /* Result nee
120c0 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69  ded in a specifi
120d0 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64  c register */.#d
120e0 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
120f0 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49  e   0x0400  /* I
12100 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
12110 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
12120 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
12130 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38  _xIsSelect  0x08
12140 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  00  /* x.pSelect
12150 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
12160 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
12170 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 45 50 5f   */..#define EP_
12180 52 65 64 75 63 65 64 20 20 20 20 30 78 31 30 30  Reduced    0x100
12190 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  0  /* Expr struc
121a0 74 20 69 73 20 45 58 50 52 5f 52 45 44 55 43 45  t is EXPR_REDUCE
121b0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
121c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
121d0 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 32 30 30 30  okenOnly  0x2000
121e0 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74    /* Expr struct
121f0 20 69 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e   is EXPR_TOKENON
12200 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
12210 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
12220 53 74 61 74 69 63 20 20 20 20 20 30 78 34 30 30  Static     0x400
12230 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  0  /* Held in me
12240 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
12250 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
12260 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
12270 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
12280 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
12290 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
122a0 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  gs2 field..*/.#d
122b0 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63  efine EP2_Malloc
122c0 65 64 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20  edToken  0x0001 
122d0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
122e0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
122f0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
12300 6e 65 20 45 50 32 5f 49 72 72 65 64 75 63 69 62  ne EP2_Irreducib
12310 6c 65 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  le    0x0002  /*
12320 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
12330 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
12340 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70   */../*.** The p
12350 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71  seudo-routine sq
12360 6c 69 74 65 33 45 78 70 72 53 65 74 49 72 72 65  lite3ExprSetIrre
12370 64 75 63 69 62 6c 65 20 73 65 74 73 20 74 68 65  ducible sets the
12380 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
12390 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65  .** flag on an e
123a0 78 70 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74  xpression struct
123b0 75 72 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20  ure.  This flag 
123c0 69 73 20 75 73 65 64 20 66 6f 72 20 56 56 26 41  is used for VV&A
123d0 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72   only.  The.** r
123e0 6f 75 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d  outine is implem
123f0 65 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f  ented as a macro
12400 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73   that only works
12410 20 77 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69   when in debuggi
12420 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61  ng mode,.** so a
12430 73 20 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20  s not to burden 
12440 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e  production code.
12450 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
12460 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
12470 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69   ExprSetIrreduci
12480 62 6c 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61  ble(X)  (X)->fla
12490 67 73 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64  gs2 |= EP2_Irred
124a0 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64  ucible.#else.# d
124b0 65 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72  efine ExprSetIrr
124c0 65 64 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64  educible(X).#end
124d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
124e0 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
124f0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
12500 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
12510 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
12520 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
12530 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
12540 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
12550 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
12560 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
12570 45 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72  ExprHasAnyProper
12580 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
12590 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
125a0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
125b0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
125c0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
125d0 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
125e0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
125f0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
12600 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  )../*.** Macros 
12610 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
12620 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
12630 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
12640 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
12650 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
12660 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
12670 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
12680 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
12690 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
126a0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
126b0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
126c0 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
126d0 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
126e0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
126f0 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
12700 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
12710 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
12720 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
12730 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12740 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
12750 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
12760 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
12770 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
12780 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
12790 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
127a0 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
127b0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
127c0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
127d0 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
127e0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
127f0 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
12800 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
12810 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
12820 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
12830 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
12840 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
12850 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
12860 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
12870 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
12880 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
12890 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
128a0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
128b0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
128c0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
128d0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
128e0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
128f0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
12900 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
12910 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
12920 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
12930 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
12940 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
12950 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
12960 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
12970 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
12980 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
12990 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
129a0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
129b0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
129c0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
129d0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
129e0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
129f0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
12a00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
12a10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
12a20 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
12a30 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  ist */.  int nAl
12a40 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
12a50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
12a60 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ries allocated b
12a70 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45  elow */.  int iE
12a80 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
12a90 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20   /* VDBE Cursor 
12aa0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12ab0 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f  this ExprList */
12ac0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
12ad0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 45 78  st_item {.    Ex
12ae0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12af0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
12b00 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
12b10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
12b20 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  me;           /*
12b30 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
12b40 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
12b50 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
12b60 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
12b70 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
12b80 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
12b90 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
12ba0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
12bb0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
12bc0 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
12bd0 20 2a 2f 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b   */.    u8 done;
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12bf0 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
12c00 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
12c10 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
12c20 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 43 6f 6c   */.    u16 iCol
12c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12c40 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
12c50 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
12c60 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
12c70 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
12c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
12c90 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
12ca0 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
12cb0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   */.  } *a;     
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cd0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
12ce0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  ch expression */
12cf0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
12d00 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
12d10 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
12d20 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74   by the parser t
12d30 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a  o record both.**
12d40 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
12d50 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f  for an expressio
12d60 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f  n and the span o
12d70 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72  f input text for
12d80 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   an.** expressio
12d90 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  n..*/.struct Exp
12da0 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a  rSpan {.  Expr *
12db0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
12dc0 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
12dd0 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a  n parse tree */.
12de0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
12df0 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74  tart;   /* First
12e00 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e   character of in
12e10 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f  put text */.  co
12e20 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20  nst char *zEnd; 
12e30 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61      /* One chara
12e40 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e  cter past the en
12e50 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  d of input text 
12e60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
12e70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
12e80 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
12e90 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
12ea0 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
12eb0 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
12ec0 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
12ed0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
12ee0 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
12ef0 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
12f00 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
12f10 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
12f20 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
12f30 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
12f40 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
12f50 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
12f60 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
12f70 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
12f80 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
12f90 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
12fa0 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
12fb0 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
12fc0 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
12fd0 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
12fe0 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
12ff0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
13000 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
13010 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
13020 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
13030 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
13040 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
13050 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
13060 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
13070 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
13080 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
13090 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
130a0 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
130b0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
130c0 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
130d0 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
130e0 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
130f0 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
13100 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
13110 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
13120 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
13130 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
13140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
13150 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
13160 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20  e list */.  int 
13170 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
13180 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
13190 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
131a0 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  a[] below */.};.
131b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
131c0 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
131d0 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
131e0 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
131f0 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
13200 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
13210 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
13220 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
13230 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
13240 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
13250 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
13260 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
13270 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
13280 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
13290 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
132a0 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
132b0 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
132c0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
132d0 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
132e0 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
132f0 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
13300 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
13310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
13320 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
13330 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
13340 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
13350 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13360 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
13370 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
13380 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
13390 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
133a0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
133b0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
133c0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
133d0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
133e0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
133f0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13400 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13410 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13420 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13430 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
13440 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
13450 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
13460 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
13470 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
13480 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
13490 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
134a0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
134b0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
134c0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
134d0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
134e0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
134f0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13500 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13510 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13520 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13530 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13540 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13550 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13560 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13570 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13580 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13590 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
135a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
135b0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
135c0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
135d0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
135e0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
135f0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13600 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13610 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13620 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13630 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13640 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13650 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13660 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13670 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13680 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13690 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
136a0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
136b0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
136c0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
136d0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
136e0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
136f0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13700 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13710 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13720 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13730 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20  SrcList {.  i16 
13740 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
13750 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
13760 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
13770 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
13780 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f  e */.  i16 nAllo
13790 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
137a0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
137b0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
137c0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
137d0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
137e0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
137f0 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
13800 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
13810 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
13820 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
13830 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
13840 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
13850 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13860 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
13870 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
13880 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
13890 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
138a0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
138b0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
138c0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
138d0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
138e0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
138f0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
13900 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
13910 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
13920 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
13930 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
13940 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
13950 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
13960 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
13970 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
13980 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
13990 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
139a0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
139b0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
139c0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
139d0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
139e0 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
139f0 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
13a00 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
13a10 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
13a20 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
13a30 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
13a40 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 38  evious */.    u8
13a50 20 6e 6f 74 49 6e 64 65 78 65 64 3b 20 20 20 20   notIndexed;    
13a60 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
13a70 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
13a80 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
13a90 75 38 20 69 73 43 6f 72 72 65 6c 61 74 65 64 3b  u8 isCorrelated;
13aa0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
13ab0 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
13ac0 61 74 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ated */.#ifndef 
13ad0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
13ae0 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
13af0 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
13b00 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
13b10 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
13b20 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
13b30 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
13b40 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
13b50 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
13b60 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
13b70 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
13b80 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
13b90 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
13ba0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
13bb0 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
13bc0 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
13bd0 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
13be0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
13bf0 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
13c00 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
13c10 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
13c20 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
13c30 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  sed */.    char 
13c40 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20  *zIndex;     /* 
13c50 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
13c60 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
13c70 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
13c80 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65      Index *pInde
13c90 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73  x;    /* Index s
13ca0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
13cb0 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78  onding to zIndex
13cc0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20  , if any */.  } 
13cd0 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
13ce0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
13cf0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
13d00 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
13d10 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
13d20 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
13d30 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
13d40 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
13d50 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
13d60 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
13d70 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
13d80 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
13d90 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
13da0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
13db0 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
13dc0 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
13dd0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
13de0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
13df0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
13e00 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
13e10 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
13e20 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
13e30 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
13e40 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
13e50 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
13e60 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13e70 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
13e80 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
13e90 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
13ea0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
13eb0 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
13ec0 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
13ed0 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
13ee0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
13ef0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
13f00 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
13f10 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72 65 50  ../*.** A WhereP
13f20 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  lan object holds
13f30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
13f40 74 20 64 65 73 63 72 69 62 65 73 20 61 20 6c 6f  t describes a lo
13f50 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65 67 79  okup.** strategy
13f60 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ..**.** This obj
13f70 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ect is intended 
13f80 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f 75 74  to be opaque out
13f90 73 69 64 65 20 6f 66 20 74 68 65 20 77 68 65 72  side of the wher
13fa0 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 20 49  e.c module..** I
13fb0 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65  t is included he
13fc0 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  re only so that 
13fd0 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20 77 69  that compiler wi
13fe0 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ll know how big 
13ff0 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e 65 20  it.** is.  None 
14000 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e  of the fields in
14010 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 68 6f   this object sho
14020 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75 74 73  uld be used outs
14030 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20 77 68  ide of.** the wh
14040 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a  ere.c module..**
14050 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65 20 75  .** Within the u
14060 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20 6f 6e  nion, pIdx is on
14070 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46  ly used when wsF
14080 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44 45 58  lags&WHERE_INDEX
14090 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 70  ED is true..** p
140a0 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75 73 65  Term is only use
140b0 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57  d when wsFlags&W
140c0 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 69 73  HERE_MULTI_OR is
140d0 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56 74 61   true.  And pVta
140e0 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20  bIdx.** is only 
140f0 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67  used when wsFlag
14100 73 26 57 48 45 52 45 5f 56 49 52 54 55 41 4c 54  s&WHERE_VIRTUALT
14110 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20 20 49  ABLE is true.  I
14120 74 20 69 73 20 6e 65 76 65 72 20 74 68 65 0a 2a  t is never the.*
14130 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f 72 65  * case that more
14140 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74 68 65   than one of the
14150 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 69 73  se conditions is
14160 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75 63 74   true..*/.struct
14170 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20 20 75   WherePlan {.  u
14180 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20 20 20  32 wsFlags;     
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
141a0 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73 20 74   WHERE_* flags t
141b0 68 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65  hat describe the
141c0 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20 75   strategy */.  u
141d0 33 32 20 6e 45 71 3b 20 20 20 20 20 20 20 20 20  32 nEq;         
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
141f0 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20 63 6f   Number of == co
14200 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 64  nstraints */.  d
14210 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20  ouble nRow;     
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14230 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
14240 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45  r of rows (for E
14250 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  QP) */.  union {
14260 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
14270 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14280 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65      /* Index whe
14290 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20  n WHERE_INDEXED 
142a0 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73  is true */.    s
142b0 74 72 75 63 74 20 57 68 65 72 65 54 65 72 6d 20  truct WhereTerm 
142c0 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a  *pTerm;       /*
142d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 65   WHERE clause te
142e0 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68  rm for OR-search
142f0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
14300 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61  index_info *pVta
14310 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61  bIdx;  /* Virtua
14320 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f  l table index to
14330 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d   use */.  } u;.}
14340 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63  ;../*.** For eac
14350 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e  h nested loop in
14360 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
14370 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
14380 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a  the WhereInfo.**
14390 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
143a0 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ins a single ins
143b0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
143c0 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73  ructure.  This s
143d0 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69  tructure.** is i
143e0 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72  ntended to be pr
143f0 69 76 61 74 65 20 74 68 65 20 74 68 65 20 77 68  ivate the the wh
14400 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64  ere.c module and
14410 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
14420 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69  * access or modi
14430 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f  fied by other mo
14440 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  dules..**.** The
14450 20 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20   pIdxInfo field 
14460 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
14470 70 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e  pick the best in
14480 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74  dex on a.** virt
14490 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ual table.  The 
144a0 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72  pIdxInfo pointer
144b0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69   contains indexi
144c0 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  ng.** informatio
144d0 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74  n for the i-th t
144e0 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
144f0 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72   clause before r
14500 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c  eordering..** Al
14510 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70  l the pIdxInfo p
14520 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65  ointers are free
14530 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72  d by whereInfoFr
14540 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e  ee() in where.c.
14550 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e  .** All other in
14560 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65  formation in the
14570 20 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c   i-th WhereLevel
14580 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
14590 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66  i-th table.** af
145a0 74 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  ter FROM clause 
145b0 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  ordering..*/.str
145c0 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b  uct WhereLevel {
145d0 0a 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61  .  WherePlan pla
145e0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72  n;       /* quer
145f0 79 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20  y plan for this 
14600 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46  element of the F
14610 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
14620 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20  int iLeftJoin;  
14630 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
14640 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70  cell used to imp
14650 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45  lement LEFT OUTE
14660 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20  R JOIN */.  int 
14670 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  iTabCur;        
14680 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
14690 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63  rsor used to acc
146a0 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ess the table */
146b0 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
146c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
146d0 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64  VDBE cursor used
146e0 20 74 6f 20 61 63 63 65 73 73 20 70 49 64 78 20   to access pIdx 
146f0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b  */.  int addrBrk
14700 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75  ;          /* Ju
14710 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b  mp here to break
14720 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70   out of the loop
14730 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78   */.  int addrNx
14740 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  t;          /* J
14750 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72  ump here to star
14760 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f  t the next IN co
14770 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  mbination */.  i
14780 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20  nt addrCont;    
14790 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
147a0 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69  e to continue wi
147b0 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70  th the next loop
147c0 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   cycle */.  int 
147d0 61 64 64 72 46 69 72 73 74 3b 20 20 20 20 20 20  addrFirst;      
147e0 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72    /* First instr
147f0 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69  uction of interi
14800 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  or of the loop *
14810 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20  /.  u8 iFrom;   
14820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
14830 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
14840 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
14850 20 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20   u8 op, p5;     
14860 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
14870 20 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f   and P5 of the o
14880 70 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20  pcode that ends 
14890 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
148a0 74 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20  t p1, p2;       
148b0 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20      /* Operands 
148c0 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73  of the opcode us
148d0 65 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c  ed to ends the l
148e0 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  oop */.  union {
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14900 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  * Information th
14910 61 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c  at depends on pl
14920 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20  an.wsFlags */.  
14930 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
14940 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20   int nIn;       
14950 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14960 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
14970 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20  InLoop[] */.    
14980 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20    struct InLoop 
14990 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 43  {.        int iC
149a0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
149b0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
149c0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 69 73  sor used by this
149d0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
149e0 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72          int addr
149f0 49 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f  InTop;         /
14a00 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20  * Top of the IN 
14a10 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 7d 20  loop */.      } 
14a20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20  *aInLoop;       
14a30 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
14a40 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65  on about each ne
14a50 73 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f 72  sted IN operator
14a60 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20   */.    } in;   
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14a80 20 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e   Used when plan.
14a90 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e  wsFlags&WHERE_IN
14aa0 5f 41 42 4c 45 20 2a 2f 0a 20 20 7d 20 75 3b 0a  _ABLE */.  } u;.
14ab0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
14ac0 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65 61  ing field is rea
14ad0 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66 20  lly not part of 
14ae0 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76 65  the current leve
14af0 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65 20  l.  But.  ** we 
14b00 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f 20  need a place to 
14b10 63 61 63 68 65 20 76 69 72 74 75 61 6c 20 74 61  cache virtual ta
14b20 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d  ble index inform
14b30 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20  ation for each. 
14b40 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c   ** virtual tabl
14b50 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
14b60 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65  ause and the Whe
14b70 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72  reLevel structur
14b80 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76  e is.  ** a conv
14b90 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69 6e  enient place sin
14ba0 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  ce there is one 
14bb0 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20 65  WhereLevel for e
14bc0 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  ach FROM clause.
14bd0 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20    ** element..  
14be0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64  */.  sqlite3_ind
14bf0 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66  ex_info *pIdxInf
14c00 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66  o;  /* Index inf
14c10 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63  o for n-th sourc
14c20 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
14c30 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
14c40 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
14c50 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
14c60 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
14c70 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
14c80 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
14c90 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
14ca0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
14cb0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
14cc0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
14cd0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
14ce0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
14cf0 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
14d00 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
14d10 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
14d20 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14d30 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
14d40 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
14d50 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
14d60 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
14d70 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
14d80 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
14d90 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
14da0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
14db0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
14dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14dd0 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
14de0 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
14df0 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
14e00 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
14e10 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14e20 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
14e30 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
14e40 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
14e50 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
14e60 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
14e70 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
14e80 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
14e90 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
14ea0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
14eb0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
14ec0 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
14ed0 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
14ee0 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
14ef0 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
14f00 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20   WHERE_AND_ONLY 
14f10 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f          0x0080 /
14f20 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69  * Don't use indi
14f30 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73  ces for OR terms
14f40 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57   */../*.** The W
14f50 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
14f60 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20 68  essing routine h
14f70 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20 20  as two halves.  
14f80 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61 72  The.** first par
14f90 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72 74  t does the start
14fa0 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f   of the WHERE lo
14fb0 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  op and the secon
14fc0 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20 74  d.** half does t
14fd0 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20 57  he tail of the W
14fe0 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69  HERE loop.  An i
14ff0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
15000 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
15010 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
15020 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20 70  first half and p
15030 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68  assed.** into th
15040 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f  e second half to
15050 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69   give some conti
15060 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74  nuity..*/.struct
15070 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50   WhereInfo {.  P
15080 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
15090 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61      /* Parsing a
150a0 6e 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  nd code generati
150b0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
150c0 75 31 36 20 77 63 74 72 6c 46 6c 61 67 73 3b 20  u16 wctrlFlags; 
150d0 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f 72       /* Flags or
150e0 69 67 69 6e 61 6c 6c 79 20 70 61 73 73 65 64 20  iginally passed 
150f0 74 6f 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  to sqlite3WhereB
15100 65 67 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20 6f  egin() */.  u8 o
15110 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20 20  kOnePass;       
15120 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e   /* Ok to use on
15130 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d  e-pass algorithm
15140 20 66 6f 72 20 55 50 44 41 54 45 20 6f 72 20 44   for UPDATE or D
15150 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e  ELETE */.  u8 un
15160 74 65 73 74 65 64 54 65 72 6d 73 3b 20 20 20 20  testedTerms;    
15170 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45  /* Not all WHERE
15180 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20   terms resolved 
15190 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f  by outer loop */
151a0 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74 3b  .  u8 eDistinct;
151b0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 54 61 62  .  SrcList *pTab
151c0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
151d0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62    /* List of tab
151e0 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20  les in the join 
151f0 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20 20  */.  int iTop;  
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79 20      /* The very 
15220 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
15230 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20   WHERE loop */. 
15240 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b 20   int iContinue; 
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
15270 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
15280 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
15290 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
152b0 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72   Jump here to br
152c0 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  eak out of the l
152d0 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65  oop */.  int nLe
152e0 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
152f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15300 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70  r of nested loop
15310 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 57 68 65   */.  struct Whe
15320 72 65 43 6c 61 75 73 65 20 2a 70 57 43 3b 20 20  reClause *pWC;  
15330 20 20 20 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73       /* Decompos
15340 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45  ition of the WHE
15350 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64  RE clause */.  d
15360 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72  ouble savedNQuer
15370 79 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 2f 2a  yLoop;        /*
15380 20 70 50 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c   pParse->nQueryL
15390 6f 6f 70 20 6f 75 74 73 69 64 65 20 74 68 65 20  oop outside the 
153a0 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20  WHERE loop */.  
153b0 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75 74 3b 20  double nRowOut; 
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
153d0 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
153e0 65 72 20 6f 66 20 6f 75 74 70 75 74 20 72 6f 77  er of output row
153f0 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76 65  s */.  WhereLeve
15400 6c 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  l a[1];         
15410 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
15420 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
15430 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45  nest loop in WHE
15440 52 45 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  RE */.};..#defin
15450 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
15460 5f 55 4e 49 51 55 45 20 31 0a 23 64 65 66 69 6e  _UNIQUE 1.#defin
15470 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
15480 5f 4f 52 44 45 52 45 44 20 32 0a 0a 2f 2a 0a 2a  _ORDERED 2../*.*
15490 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
154a0 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
154b0 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
154c0 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
154d0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
154e0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
154f0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
15500 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
15510 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
15520 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
15530 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
15540 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
15550 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
15560 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
15570 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
15580 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
15590 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
155a0 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
155b0 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
155c0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
155d0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
155e0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
155f0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
15600 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
15610 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
15620 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
15630 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
15640 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
15650 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
15660 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
15670 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
15680 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
15690 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74  most .** context
156a0 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
156b0 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
156c0 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
156d0 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
156e0 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
156f0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
15700 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
15710 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
15720 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
15730 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
15740 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
15750 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
15760 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
15770 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
15780 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
15790 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
157a0 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
157b0 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
157c0 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
157d0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
157e0 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62   .**.** Each sub
157f0 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77  query gets a new
15800 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54   NameContext.  T
15810 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70  he pNext field p
15820 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
15830 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74  NameContext in t
15840 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e  he parent query.
15850 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65    Thus the proce
15860 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74  ss of scanning t
15870 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
15880 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  t list correspon
15890 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20  ds to searching 
158a0 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69  through successi
158b0 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75  vely outer.** su
158c0 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67  bqueries looking
158d0 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f   for a match..*/
158e0 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74  .struct NameCont
158f0 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ext {.  Parse *p
15900 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  Parse;       /* 
15910 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  The parser */.  
15920 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
15930 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  t;   /* One or m
15940 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20  ore tables used 
15950 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73  to resolve names
15960 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15970 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
15980 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e  tional list of n
15990 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73  amed expressions
159a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
159b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
159c0 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
159d0 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
159e0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
159f0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
15a00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
15a10 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
15a20 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
15a30 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 61   names */.  u8 a
15a40 6c 6c 6f 77 41 67 67 3b 20 20 20 20 20 20 20 20  llowAgg;        
15a50 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
15a60 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f 77 65 64 20  nctions allowed 
15a70 68 65 72 65 20 2a 2f 0a 20 20 75 38 20 68 61 73  here */.  u8 has
15a80 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Agg;           /
15a90 2a 20 54 72 75 65 20 69 66 20 61 67 67 72 65 67  * True if aggreg
15aa0 61 74 65 73 20 61 72 65 20 73 65 65 6e 20 2a 2f  ates are seen */
15ab0 0a 20 20 75 38 20 69 73 43 68 65 63 6b 3b 20 20  .  u8 isCheck;  
15ac0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
15ad0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
15ae0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
15af0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 69 6e  nstraint */.  in
15b00 74 20 6e 44 65 70 74 68 3b 20 20 20 20 20 20 20  t nDepth;       
15b10 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 73     /* Depth of s
15b20 75 62 71 75 65 72 79 20 72 65 63 75 72 73 69 6f  ubquery recursio
15b30 6e 2e 20 31 20 66 6f 72 20 6e 6f 20 72 65 63 75  n. 1 for no recu
15b40 72 73 69 6f 6e 20 2a 2f 0a 20 20 41 67 67 49 6e  rsion */.  AggIn
15b50 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
15b60 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
15b70 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
15b80 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
15b90 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
15ba0 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
15bb0 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
15bc0 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
15bd0 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  termost */.};../
15be0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15bf0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
15c00 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
15c10 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
15c20 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
15c30 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
15c40 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
15c50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
15c60 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
15c70 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
15c80 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
15c90 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
15ca0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
15cb0 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
15cc0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
15cd0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
15ce0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
15cf0 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
15d00 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
15d10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
15d20 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
15d30 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
15d40 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
15d50 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
15d60 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
15d70 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
15d80 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
15d90 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
15da0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
15db0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
15dc0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
15dd0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
15de0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
15df0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
15e00 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
15e10 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
15e20 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
15e30 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
15e40 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
15e50 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
15e60 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
15e70 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
15e80 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
15e90 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
15ea0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15eb0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
15ec0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
15ed0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
15ee0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
15ef0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
15f00 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
15f10 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
15f20 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
15f30 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
15f40 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
15f50 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
15f60 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
15f70 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
15f80 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
15f90 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
15fa0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
15fb0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
15fc0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
15fd0 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  n[2] contains co
15fe0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
15ff0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
16000 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
16010 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
16020 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
16030 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
16040 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
16050 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
16060 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16070 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
16080 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
16090 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
160a0 45 50 54 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  EPT */.  char af
160b0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
160c0 2f 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 77 69  /* MakeRecord wi
160d0 74 68 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  th this affinity
160e0 20 66 6f 72 20 53 52 54 5f 53 65 74 20 2a 2f 0a   for SRT_Set */.
160f0 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20    u16 selFlags; 
16100 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
16110 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
16120 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
16130 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
16140 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
16150 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
16160 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
16170 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
16180 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
16190 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
161a0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
161b0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
161c0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
161d0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
161e0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
161f0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
16200 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
16210 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
16220 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
16230 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
16240 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
16250 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
16260 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
16270 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
16280 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
16290 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
162a0 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63  pound */.  Selec
162b0 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20  t *pRightmost;  
162c0 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20    /* Right-most 
162d0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
162e0 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
162f0 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20  ement */.  Expr 
16300 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
16310 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
16320 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
16330 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
16340 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
16350 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
16360 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
16370 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
16380 64 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  d. */.  int iLim
16390 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
163a0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
163b0 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
163c0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
163d0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  rs */.  int addr
163e0 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f  OpenEphm[3];   /
163f0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
16400 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
16410 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
16420 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63  .  double nSelec
16430 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
16440 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
16450 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
16460 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
16470 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
16480 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
16490 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
164a0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
164b0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
164c0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
164d0 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
164e0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
164f0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
16500 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
16510 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
16520 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  002  /* Identifi
16530 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
16540 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
16550 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
16560 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
16570 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
16580 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
16590 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
165a0 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30  phemeral   0x000
165b0 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  8  /* Uses the O
165c0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
165d0 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
165e0 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
165f0 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c    0x0010  /* sql
16600 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
16610 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
16620 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16630 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
16640 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0020  /* FROM 
16650 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
16660 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
16670 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
16680 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78 30  Sorter       0x0
16690 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75 73 69  040  /* Sort usi
166a0 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a 0a  ng a sorter */..
166b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
166c0 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63  ts of a select c
166d0 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
166e0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
166f0 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22  s.  The.** "SRT"
16700 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
16710 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70  ELECT Result Typ
16720 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e"..*/.#define S
16730 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
16740 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
16750 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
16760 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16770 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
16780 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
16790 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
167a0 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
167b0 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
167c0 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
167d0 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
167e0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
167f0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
16800 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
16810 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
16820 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
16830 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  e */../* The ORD
16840 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
16850 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
16860 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
16870 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
16880 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
16890 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
168a0 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53  card)..#define S
168b0 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
168c0 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  5  /* Output eac
168d0 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
168e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
168f0 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f  em          6  /
16900 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
16910 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
16920 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
16930 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f  et          7  /
16940 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
16950 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
16960 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
16970 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20  RT_Table        
16980 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  8  /* Store resu
16990 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
169a0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
169b0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
169c0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39  T_EphemTab     9
169d0 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
169e0 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
169f0 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
16a00 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
16a10 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30  T_Coroutine   10
16a20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
16a30 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
16a40 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  sult */../*.** A
16a50 20 73 74 72 75 63 74 75 72 65 20 75 73 65 64 20   structure used 
16a60 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65  to customize the
16a70 20 62 65 68 61 76 69 6f 72 20 6f 66 20 73 71 6c   behavior of sql
16a80 69 74 65 33 53 65 6c 65 63 74 28 29 2e 20 53 65  ite3Select(). Se
16a90 65 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73 20 61 62  e.** comments ab
16aa0 6f 76 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ove sqlite3Selec
16ab0 74 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  t() for details.
16ac0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
16ad0 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65  ct SelectDest Se
16ae0 6c 65 63 74 44 65 73 74 3b 0a 73 74 72 75 63 74  lectDest;.struct
16af0 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
16b00 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
16b10 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
16b20 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
16b30 74 73 20 2a 2f 0a 20 20 75 38 20 61 66 66 69 6e  ts */.  u8 affin
16b40 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
16b50 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
16b60 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
16b70 2f 0a 20 20 69 6e 74 20 69 50 61 72 6d 3b 20 20  /.  int iParm;  
16b80 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
16b90 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
16ba0 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
16bb0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
16bc0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  iMem;         /*
16bd0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
16be0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
16bf0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
16c00 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
16c10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
16c20 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16c30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
16c40 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
16c50 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
16c60 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
16c70 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
16c80 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
16c90 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16ca0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
16cb0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
16cc0 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
16cd0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
16ce0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
16cf0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
16d00 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
16d10 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
16d20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
16d30 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
16d40 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
16d50 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
16d60 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
16d70 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
16d80 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
16d90 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
16da0 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
16db0 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
16dc0 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
16dd0 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
16de0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
16df0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
16e00 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
16e10 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
16e20 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
16e30 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
16e40 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
16e50 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
16e60 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
16e70 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
16e80 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
16e90 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
16ea0 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
16eb0 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
16ec0 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16ee0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
16ef0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
16f00 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
16f10 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
16f20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
16f30 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
16f40 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
16f50 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
16f60 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
16f70 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
16f80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16f90 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
16fa0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
16fb0 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
16fc0 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
16fd0 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
16fe0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16ff0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
17000 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
17010 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
17020 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
17030 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
17040 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
17050 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
17060 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
17070 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
17080 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
17090 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
170a0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
170b0 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
170c0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
170d0 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
170e0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
170f0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
17100 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
17110 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
17120 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
17130 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
17140 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
17150 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
17160 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
17170 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
17180 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
17190 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
171a0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
171b0 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
171c0 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
171d0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
171e0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
171f0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
17200 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
17210 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
17220 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
17230 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
17240 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
17250 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
17260 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
17270 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
17280 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
17290 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
172a0 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
172b0 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
172c0 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
172d0 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
172e0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
172f0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
17300 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
17310 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
17320 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
17330 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
17340 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
17350 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
17360 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
17370 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
17380 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
17390 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
173b0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
173c0 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
173d0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
173e0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
173f0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
17400 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
17410 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
17420 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
17430 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
17440 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
17450 63 65 73 73 65 64 20 2a 2f 0a 20 20 54 72 69 67  cessed */.  Trig
17460 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20  gerPrg *pNext;  
17470 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
17480 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67  y in Parse.pTrig
17490 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 7d  gerPrg list */.}
174a0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
174b0 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
174c0 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
174d0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
174e0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
174f0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
17500 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
17510 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
17520 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  yDbMask;.#else. 
17530 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
17540 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
17550 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
17560 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
17570 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
17580 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
17590 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
175a0 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
175b0 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
175c0 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
175d0 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
175e0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
175f0 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
17600 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
17610 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
17620 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
17630 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
17640 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
17650 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
17660 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
17670 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
17680 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
17690 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
176a0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
176b0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
176c0 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
176d0 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
176e0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
176f0 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
17700 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
17710 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
17720 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
17730 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
17740 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
17750 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
17760 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  he .** feature i
17770 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
17780 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
17790 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
177a0 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
177b0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
177c0 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
177d0 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
177e0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
177f0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
17800 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
17810 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
17820 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
17830 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
17840 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
17850 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
17860 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
17870 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
17880 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
17890 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
178a0 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
178b0 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
178c0 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  tion */.  char *
178d0 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
178e0 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
178f0 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
17900 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
17910 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
17920 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
17930 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 75   bytecode */.  u
17940 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
17950 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
17960 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
17970 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
17980 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
17990 20 6e 61 6d 65 43 6c 61 73 68 3b 20 20 20 20 20   nameClash;     
179a0 20 20 20 2f 2a 20 41 20 70 65 72 6d 61 6e 65 6e     /* A permanen
179b0 74 20 74 61 62 6c 65 20 6e 61 6d 65 20 63 6c 61  t table name cla
179c0 73 68 65 73 20 77 69 74 68 20 74 65 6d 70 20 74  shes with temp t
179d0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 75  able name */.  u
179e0 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
179f0 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
17a00 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
17a10 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
17a20 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
17a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17a40 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
17a50 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
17a60 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
17a70 72 20 2a 2f 0a 20 20 75 38 20 70 61 72 73 65 45  r */.  u8 parseE
17a80 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 54  rror;       /* T
17a90 72 75 65 20 61 66 74 65 72 20 61 20 70 61 72 73  rue after a pars
17aa0 69 6e 67 20 65 72 72 6f 72 2e 20 20 54 69 63 6b  ing error.  Tick
17ab0 65 74 20 23 31 37 39 34 20 2a 2f 0a 20 20 75 38  et #1794 */.  u8
17ac0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
17ad0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17ae0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
17af0 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
17b00 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49  ] */.  u8 nTempI
17b10 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e  nUse;       /* N
17b20 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65  umber of aTempRe
17b30 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68  g[] currently ch
17b40 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
17b50 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
17b60 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
17b70 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
17b80 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
17b90 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
17ba0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
17bb0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
17bc0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
17bd0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
17be0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
17bf0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
17c00 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
17c10 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
17c20 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
17c30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
17c40 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
17c50 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
17c60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17c70 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
17c80 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
17c90 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17cb0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
17cc0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
17cd0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17cf0 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
17d00 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
17d10 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
17d20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17d30 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
17d40 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
17d50 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
17d60 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
17d70 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
17d80 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
17d90 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
17da0 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
17db0 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
17dc0 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
17dd0 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
17de0 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
17df0 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
17e00 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
17e10 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
17e20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
17e30 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6e  values */.  u8 n
17e40 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
17e50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
17e60 74 72 69 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  tries in the col
17e70 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 20 20 75  umn cache */.  u
17e80 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
17e90 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
17ea0 79 20 6f 66 20 74 68 65 20 63 61 63 68 65 20 74  y of the cache t
17eb0 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 73  o replace */.  s
17ec0 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
17ed0 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
17ee0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
17ef0 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
17f00 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
17f10 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17f20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
17f30 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
17f40 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
17f50 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
17f60 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
17f70 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
17f80 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
17f90 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
17fa0 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
17fb0 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
17fc0 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
17fd0 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
17fe0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
17ff0 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
18000 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18020 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
18030 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
18040 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
18050 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
18060 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
18070 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
18080 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
18090 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
180a0 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
180b0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
180c0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
180d0 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
180e0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
180f0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
18100 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
18110 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
18120 61 62 61 73 65 73 20 2a 2f 0a 20 20 75 38 20 69  abases */.  u8 i
18130 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
18140 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
18150 65 6d 65 6e 74 20 6d 61 79 20 61 66 66 65 63 74  ement may affect
18160 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
18170 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
18180 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
18190 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
181a0 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
181b0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
181c0 6e 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  n */.  int cooki
181d0 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41  eGoto;      /* A
181e0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74  ddress of OP_Got
181f0 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69  o to cookie veri
18200 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20  fier subroutine 
18210 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
18220 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
18230 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
18240 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
18250 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
18260 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18270 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
18280 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
18290 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
182a0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
182b0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
182c0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
182d0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
182e0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
182f0 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
18300 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
18310 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
18320 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
18330 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
18340 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
18350 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
18360 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
18370 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
18380 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
18390 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
183a0 65 63 74 73 20 2a 2f 0a 20 20 41 75 74 6f 69 6e  ects */.  Autoin
183b0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
183c0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
183d0 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
183e0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
183f0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
18400 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
18410 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
18420 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
18430 70 72 6f 67 72 61 6d 20 2a 2f 0a 0a 20 20 2f 2a  program */..  /*
18440 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
18450 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
18460 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
18470 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
18480 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
18490 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
184a0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
184b0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
184c0 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
184d0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
184e0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
184f0 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33  oded for */.  u3
18500 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
18510 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
18520 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
18530 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
18540 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
18550 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
18560 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
18570 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
18580 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
18590 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
185a0 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
185b0 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
185c0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
185d0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
185e0 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
185f0 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
18600 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
18610 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
18620 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
18630 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  ers */.  double 
18640 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a  nQueryLoop;   /*
18650 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
18660 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
18670 6f 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 0a 20  of a query */.. 
18680 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   /* Above is con
18690 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
186a0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
186b0 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
186c0 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
186d0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a  each recursion *
186e0 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
186f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18700 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
18710 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
18720 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
18730 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
18740 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18750 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
18760 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
18770 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
18780 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
18790 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
187a0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
187b0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
187c0 3b 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67  ;    /* VM being
187d0 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
187e0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
187f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73   */.  int nAlias
18800 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
18810 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
18820 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18830 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69  ns */.  int nAli
18840 61 73 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20  asAlloc;     /* 
18850 4e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61  Number of alloca
18860 74 65 64 20 73 6c 6f 74 73 20 66 6f 72 20 61 41  ted slots for aA
18870 6c 69 61 73 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  lias[] */.  int 
18880 2a 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20  *aAlias;        
18890 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65   /* Register use
188a0 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65  d to hold aliase
188b0 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  d result */.  u8
188c0 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
188d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
188e0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
188f0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
18900 75 65 72 79 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  uery */.  Token 
18910 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 2f  sNameToken;    /
18920 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
18930 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
18940 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
18950 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
18960 6e 3b 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73  n;    /* The las
18970 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
18980 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18990 7a 54 61 69 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20  zTail;   /* All 
189a0 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
189b0 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
189c0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
189d0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
189e0 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
189f0 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
18a00 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
18a10 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
18a20 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
18a30 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
18a40 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
18a50 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
18a60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
18a70 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
18a80 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
18a90 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
18aa0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64  llbacks */.#ifnd
18ab0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
18ac0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
18ad0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
18ae0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
18af0 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
18b00 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
18b10 2f 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  /.  u8 declareVt
18b20 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
18b30 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
18b40 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
18b50 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
18b60 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
18b70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18b80 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
18b90 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 20  les to lock */. 
18ba0 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c   Table **apVtabL
18bb0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ock;        /* P
18bc0 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
18bd0 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
18be0 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
18bf0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
18c00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18c10 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
18c20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
18c30 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
18c40 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
18c50 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73  Tab;      /* Lis
18c60 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
18c70 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
18c80 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
18c90 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
18ca0 69 67 67 65 72 50 72 67 3b 20 20 20 20 2f 2a 20  iggerPrg;    /* 
18cb0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
18cc0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
18cd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
18ce0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
18cf0 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 0a 20  int iSelectId;. 
18d00 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74   int iNextSelect
18d10 49 64 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23  Id;.#endif.};..#
18d20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
18d30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
18d40 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
18d50 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
18d60 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
18d70 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
18d80 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
18d90 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
18da0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
18db0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
18dc0 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
18dd0 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
18de0 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
18df0 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
18e00 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
18e10 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
18e20 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
18e30 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
18e40 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
18e50 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18e60 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
18e70 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
18e80 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
18e90 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
18ea0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
18eb0 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
18ec0 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
18ed0 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
18ee0 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
18ef0 69 6e 20 4f 50 5f 49 6e 73 65 72 74 20 61 6e 64  in OP_Insert and
18f00 20 4f 50 5f 44 65 6c 65 74 65 0a 2a 2f 0a 23 64   OP_Delete.*/.#d
18f10 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
18f20 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
18f30 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
18f40 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
18f50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18f60 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
18f70 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
18f80 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
18f90 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
18fa0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
18fb0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
18fc0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
18fd0 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
18fe0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
18ff0 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
19000 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
19010 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
19020 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
19030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
19040 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
19050 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
19060 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
19070 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
19080 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c  define OPFLAG_CL
19090 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30  EARCACHE    0x20
190a0 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65      /* Clear pse
190b0 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20  udo-table cache 
190c0 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a  in OP_Column */.
190d0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
190e0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
190f0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
19100 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
19110 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
19120 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
19130 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
19140 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
19150 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
19160 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
19170 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
19180 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
19190 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
191a0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
191b0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
191c0 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
191d0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
191e0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
191f0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
19200 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
19210 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
19220 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
19230 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
19240 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
19250 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
19260 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
19270 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
19280 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
19290 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
192a0 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
192b0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
192c0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
192d0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
192e0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
192f0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
19300 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
19310 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
19320 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
19330 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
19340 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
19350 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
19360 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
19370 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
19380 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
19390 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
193a0 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
193b0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
193c0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
193d0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
19400 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
19410 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
19420 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
19430 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
19440 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
19470 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
19480 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
19490 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
194a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
194b0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
194c0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
194d0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
194e0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
194f0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
19500 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
19510 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
19520 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
19530 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
19540 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
19550 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
19560 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
19570 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
195a0 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
195b0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
195c0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
195d0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
195e0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
195f0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
19600 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
19610 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
19620 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
19630 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
19640 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
19650 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
19660 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
19670 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
19680 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
19690 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
196a0 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
196b0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
196c0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
196d0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
196e0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
196f0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
19700 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
19710 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
19720 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
19730 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
19740 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
19750 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
19760 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
19770 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
19780 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
19790 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
197a0 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
197b0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
197c0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
197d0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
197e0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
197f0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
19800 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
19810 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
19820 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
19830 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
19840 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
19850 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
19860 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
19870 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
19880 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
19890 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
198a0 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
198b0 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
198c0 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
198d0 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
198e0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
198f0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
19900 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
19910 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
19920 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
19930 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
19940 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
19950 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
19960 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
19970 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
19980 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
19990 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
199a0 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
199b0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
199c0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
199d0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
199e0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
199f0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
19a00 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
19a10 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
19a20 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
19a30 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
19a40 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
19a50 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
19a60 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
19a70 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
19a80 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
19a90 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
19aa0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
19ab0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
19ac0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
19ad0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
19ae0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
19af0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19b00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19b10 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
19b20 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  .. * target    -
19b30 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
19b40 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
19b50 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
19b60 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
19b70 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
19b80 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
19b90 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
19ba0 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
19bb0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
19bc0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
19bd0 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
19be0 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
19bf0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
19c00 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
19c10 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
19c20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
19c30 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
19c40 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
19c50 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
19c60 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
19c70 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
19c80 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
19c90 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
19ca0 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
19cb0 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
19cc0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
19cd0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
19ce0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
19cf0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
19d00 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20  delete from.. * 
19d10 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
19d20 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
19d30 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
19d40 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
19d50 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
19d60 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
19d70 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20  wise NULL.. * . 
19d80 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
19d90 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
19da0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
19db0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
19dc0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
19dd0 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20   to update rows 
19de0 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  of.. * pWhere   
19df0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
19e00 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
19e10 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
19e20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
19e30 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
19e40 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
19e50 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
19e60 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
19e70 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
19e80 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
19e90 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
19ea0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19eb0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
19ec0 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
19ed0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
19ee0 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
19ef0 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
19f00 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63  t.. * . */.struc
19f10 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
19f20 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19f30 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19f40 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
19f50 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
19f60 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
19f70 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
19f80 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
19f90 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
19fa0 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
19fb0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
19fc0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
19fd0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
19fe0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
19ff0 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
1a000 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52  CT statment or R
1a010 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
1a020 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20  O .. SELECT ... 
1a030 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65  */.  Token targe
1a040 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72  t;        /* Tar
1a050 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1a060 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1a070 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1a080 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1a090 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1a0a0 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1a0b0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1a0c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1a0d0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1a0e0 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1a0f0 2e 20 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  .  VALUES clause
1a100 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1a110 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74   IdList *pIdList
1a120 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  ;     /* Column 
1a130 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54  names for INSERT
1a140 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1a150 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  p *pNext;  /* Ne
1a160 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c  xt in the link-l
1a170 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ist */.  Trigger
1a180 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a  Step *pLast;  /*
1a190 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e   Last element in
1a1a0 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69   link-list. Vali
1a1b0 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f  d for 1st elem o
1a1c0 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  nly */.};../*.**
1a1d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
1a1e0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1a1f0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  s information us
1a200 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
1a210 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e  Fix....** routin
1a220 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20  es as they walk 
1a230 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74  the parse tree t
1a240 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20  o make database 
1a250 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78  references.** ex
1a260 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70  plicit.  .*/.typ
1a270 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
1a280 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
1a290 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
1a2a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1a2b0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
1a2c0 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
1a2d0 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
1a2e0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
1a2f0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
1a300 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
1a310 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
1a320 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1a330 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
1a340 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
1a350 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
1a360 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
1a370 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1a380 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
1a390 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1a3a0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1a3b0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
1a3c0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
1a3d0 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
1a3e0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1a3f0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1a400 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
1a410 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
1a420 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
1a430 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
1a440 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
1a450 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
1a460 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
1a470 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
1a480 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
1a490 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
1a4a0 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
1a4b0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1a4c0 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
1a4d0 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
1a4e0 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
1a4f0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
1a500 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
1a510 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
1a520 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
1a530 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
1a540 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
1a550 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
1a560 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
1a570 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20  int  nChar;     
1a580 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
1a590 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
1a5a0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41  far */.  int  nA
1a5b0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
1a5c0 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
1a5d0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
1a5e0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78  ext */.  int  mx
1a5f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1a600 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
1a610 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1a620 2f 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46  /.  u8   mallocF
1a630 61 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f  ailed;   /* Beco
1a640 6d 65 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  mes true if any 
1a650 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1a660 6e 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20  n fails */.  u8 
1a670 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20    useMalloc;    
1a680 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31    /* 0: none,  1
1a690 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  : sqlite3DbMallo
1a6a0 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d  c,  2: sqlite3_m
1a6b0 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20  alloc */.  u8   
1a6c0 74 6f 6f 42 69 67 3b 20 20 20 20 20 20 20 20 20  tooBig;         
1a6d0 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
1a6e0 69 66 20 73 74 72 69 6e 67 20 73 69 7a 65 20 65  if string size e
1a6f0 78 63 65 65 64 73 20 6c 69 6d 69 74 73 20 2a 2f  xceeds limits */
1a700 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  .};../*.** A poi
1a710 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1a720 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1a730 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1a740 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1a750 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1a760 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1a770 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1a780 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1a790 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1a7a0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1a7b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1a7c0 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1a7d0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1a7e0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1a7f0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
1a800 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
1a810 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
1a820 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 63   ATTACHed */.  c
1a830 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
1a840 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
1a850 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
1a860 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1a870 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1a880 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1a890 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1a8a0 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1a8b0 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1a8c0 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1a8d0 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1a8e0 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1a8f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1a900 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1a910 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1a920 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1a930 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1a940 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1a950 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1a960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1a970 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1a980 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1a990 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1a9c0 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1a9d0 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1a9e0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1a9f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1aa00 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1aa10 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1aa20 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aa40 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1aa50 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1aa60 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 6d   URIs */.  int m
1aa70 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aa90 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1aaa0 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73  ength */.  int s
1aab0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aad0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1aae0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1aaf0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1ab00 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ab10 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1ab20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1ab30 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1ab40 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1ab50 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1ab60 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1ab70 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1ab80 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1ab90 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1aba0 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1abb0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1abc0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1abd0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1abe0 65 74 68 6f 64 73 20 70 63 61 63 68 65 3b 20 20  ethods pcache;  
1abf0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1ac00 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1ac10 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1ac20 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1ac30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1ac40 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1ac50 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1ac80 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1ac90 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1aca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1acb0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1acc0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1acd0 69 7a 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  izes */.  void *
1ace0 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1ad00 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1ad10 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1ad20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ad30 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1ad40 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1ad50 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1ad60 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1ad70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ad80 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1ad90 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1ada0 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1adc0 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1add0 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1ade0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1adf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1ae00 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1ae10 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1ae20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1ae50 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1ae60 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1ae70 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1ae80 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1ae90 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1aea0 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1aeb0 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1aec0 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1aed0 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1aee0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1aef0 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1af00 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1af10 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1af20 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1af30 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1af40 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1af50 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1af60 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1af70 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1afa0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1afb0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1afc0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1aff0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1b000 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1b010 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1b020 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b030 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1b040 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1b050 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1b060 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1b090 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1b0a0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1b0b0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1b0c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1b0d0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1b0e0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1b0f0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1b100 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1b110 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1b120 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1b130 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1b140 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1b150 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1b160 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b170 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1b180 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tex */.  void (*
1b190 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1b1a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1b1b0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1b1c0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1b1d0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1b200 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20  t to xLog() */. 
1b210 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1b220 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1b230 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1b240 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1b250 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
1b260 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
1b270 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
1b280 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
1b290 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
1b2a0 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
1b2b0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
1b2c0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
1b2d0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
1b2e0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
1b2f0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
1b300 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
1b310 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
1b320 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
1b330 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1b340 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1b370 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 75  context.  */.  u
1b380 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
1b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3a0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
1b3b0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
1b3c0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
1b3d0 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
1b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
1b400 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
1b410 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
1b440 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20  eger value */.  
1b450 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1b460 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1b470 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1b480 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1b490 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1b4a0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1b4b0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1b4c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1b4d0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1b4e0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1b4f0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1b500 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1b510 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1b520 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1b530 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1b540 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1b550 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1b560 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1b570 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1b580 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1b590 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1b5a0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1b5b0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1b5c0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1b5d0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1b5e0 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1b5f0 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1b600 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1b610 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1b620 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1b630 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1b640 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1b650 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1b660 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1b670 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1b680 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1b690 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1b6a0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1b6b0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1b6c0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1b6d0 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1b6e0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1b6f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1b700 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1b730 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1b740 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b760 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1b770 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1b780 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1b790 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1b7e0 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1b7f0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1b800 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1b810 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1b820 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1b830 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1b840 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1b850 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1b860 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1b870 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1b880 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1b890 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1b8a0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1b8b0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1b8c0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
1b8d0 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
1b8e0 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
1b8f0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
1b900 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
1b910 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
1b920 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
1b930 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
1b940 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
1b950 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1b960 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
1b970 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
1b980 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
1b990 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
1b9a0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1b9b0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1b9c0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1b9d0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1b9e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
1b9f0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
1ba00 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1ba10 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
1ba20 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
1ba30 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
1ba40 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
1ba50 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
1ba60 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1ba70 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
1ba80 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
1ba90 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c  usion we also al
1baa0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
1bab0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
1bac0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
1bad0 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49   alisse for SQLI
1bae0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
1baf0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1bb00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1bb10 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
1bb20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1bb30 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
1bb40 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
1bb50 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1bb60 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
1bb70 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
1bb80 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
1bb90 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
1bba0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
1bbb0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
1bbc0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
1bbd0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
1bbe0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1bbf0 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
1bc00 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
1bc10 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
1bc20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1bc30 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
1bc40 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
1bc50 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1bc60 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1bc70 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
1bc80 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
1bc90 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
1bca0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
1bcb0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
1bcc0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
1bcd0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
1bce0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
1bcf0 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
1bd00 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
1bd10 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
1bd20 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
1bd30 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1bd40 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
1bd50 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1bd60 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
1bd70 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bd80 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bd90 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
1bda0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1bdb0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1bdc0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1bdd0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
1bde0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bdf0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
1be00 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1be10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1be20 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
1be30 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1be40 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1be50 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1be60 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
1be70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1be80 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
1be90 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1bea0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1beb0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
1bec0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1bed0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
1bee0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1bef0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
1bf00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bf10 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
1bf20 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
1bf30 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
1bf40 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
1bf50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1bf60 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
1bf70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1bf80 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1bf90 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1bfa0 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
1bfb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1bfc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bfd0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
1bfe0 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
1bff0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c000 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1c010 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
1c020 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c030 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c040 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
1c050 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
1c060 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c070 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1c080 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
1c090 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1c0a0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1c0b0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1c0c0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
1c0d0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
1c0e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
1c0f0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
1c100 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
1c110 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
1c120 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
1c130 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
1c140 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
1c150 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
1c160 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72  efine sqlite3Str
1c170 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74  NICmp sqlite3_st
1c180 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69  rnicmp..int sqli
1c190 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f  te3MallocInit(vo
1c1a0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1c1b0 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29  3MallocEnd(void)
1c1c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d  ;.void *sqlite3M
1c1d0 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1c1e0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a   *sqlite3MallocZ
1c1f0 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  ero(int);.void *
1c200 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1c210 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ero(sqlite3*, in
1c220 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1c230 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c  3DbMallocRaw(sql
1c240 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
1c250 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44  r *sqlite3DbStrD
1c260 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
1c270 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
1c280 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70  sqlite3DbStrNDup
1c290 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1c2a0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  char*, int);.voi
1c2b0 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
1c2c0 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76  c(void*, int);.v
1c2d0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
1c2e0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69  allocOrFree(sqli
1c2f0 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1c300 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c310 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69  e3DbRealloc(sqli
1c320 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69  te3 *, void *, i
1c330 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c340 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a  3DbFree(sqlite3*
1c350 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  , void*);.int sq
1c360 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28  lite3MallocSize(
1c370 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1c380 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28  te3DbMallocSize(
1c390 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1c3a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53  ;.void *sqlite3S
1c3b0 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74  cratchMalloc(int
1c3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c3d0 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a  cratchFree(void*
1c3e0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c3f0 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  PageMalloc(int);
1c400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67  .void sqlite3Pag
1c410 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  eFree(void*);.vo
1c420 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74  id sqlite3MemSet
1c430 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76  Default(void);.v
1c440 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
1c450 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
1c460 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
1c470 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e  d (*)(void));.in
1c480 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
1c490 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
1c4a0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
1c4b0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
1c4c0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
1c4d0 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
1c4e0 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
1c4f0 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
1c500 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
1c510 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
1c520 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
1c530 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
1c540 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
1c550 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
1c560 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
1c570 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
1c580 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
1c590 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
1c5a0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
1c5b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1c5c0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
1c5d0 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
1c5e0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1c5f0 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
1c600 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c610 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1c620 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
1c630 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c640 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
1c650 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
1c660 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
1c670 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
1c680 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23  ee(D,P)       .#
1c690 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1c6a0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1c6b0 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65  aw(D,N)   sqlite
1c6c0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e  3DbMallocRaw(D,N
1c6d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c6e0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
1c6f0 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62  (D,N)  sqlite3Db
1c700 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a  MallocZero(D,N).
1c710 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c720 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
1c730 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1c740 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ee(D,P).#endif..
1c750 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1c760 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
1c770 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
1c780 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
1c790 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
1c7a0 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  d);.#endif.#ifde
1c7b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1c7c0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
1c7d0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1c7e0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1c7f0 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
1c800 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
1c810 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
1c820 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
1c830 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
1c840 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
1c850 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
1c860 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1c870 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
1c880 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
1c890 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
1c8a0 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
1c8b0 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
1c8c0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
1c8d0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
1c8e0 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
1c8f0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  void);.#endif..i
1c900 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  nt sqlite3Status
1c910 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
1c920 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64   sqlite3StatusAd
1c930 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  d(int, int);.voi
1c940 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53  d sqlite3StatusS
1c950 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23  et(int, int);..#
1c960 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c970 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
1c980 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
1c990 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
1c9a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c9b0 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
1c9c0 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
1c9d0 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
1c9e0 41 63 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Accum*, int, con
1c9f0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
1ca00 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
1ca10 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f  TE_OMIT_TRACE.vo
1ca20 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
1ca30 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
1ca40 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1ca50 23 65 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c  #endif.char *sql
1ca60 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
1ca70 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1ca80 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
1ca90 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
1caa0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1cab0 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68  r*, va_list);.ch
1cac0 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65  ar *sqlite3MAppe
1cad0 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61  ndf(sqlite3*,cha
1cae0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  r*,const char*,.
1caf0 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  ..);.#if defined
1cb00 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
1cb10 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1cb20 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
1cb30 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
1cb40 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
1cb50 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
1cb60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
1cb70 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
1cb80 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
1cb90 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1cba0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
1cbb0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
1cbc0 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
1cbd0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1cbe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
1cbf0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
1cc00 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1cc10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71  ;.int sqlite3Deq
1cc20 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74  uote(char*);.int
1cc30 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
1cc40 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
1cc50 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
1cc60 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
1cc70 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
1cc80 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
1cc90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cca0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
1ccb0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1ccc0 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
1ccd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1cce0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
1ccf0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
1cd00 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
1cd10 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
1cd20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1cd30 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
1cd40 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
1cd50 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1cd60 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
1cd70 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
1cd80 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
1cd90 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
1cda0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1cdb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cdc0 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
1cdd0 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
1cde0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
1cdf0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
1ce00 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
1ce10 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
1ce20 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
1ce30 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
1ce40 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
1ce50 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
1ce60 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
1ce70 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
1ce80 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
1ce90 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
1cea0 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
1ceb0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1cec0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
1ced0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1cee0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
1cef0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1cf00 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
1cf10 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
1cf20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1cf30 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
1cf40 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
1cf50 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
1cf60 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
1cf70 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
1cf80 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
1cf90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cfa0 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
1cfb0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
1cfc0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1cfd0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
1cfe0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
1cff0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
1d000 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
1d010 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
1d020 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
1d030 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1d040 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
1d050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1d060 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
1d070 61 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  a(sqlite3*, int)
1d080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1d090 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
1d0a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d0b0 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
1d0c0 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
1d0d0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1d0e0 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
1d0f0 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
1d100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d110 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
1d120 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76  Parse *, int);.v
1d130 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
1d140 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
1d150 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
1d160 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
1d170 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
1d180 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
1d190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d1a0 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
1d1b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d1c0 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
1d1d0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
1d1e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
1d1f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d200 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
1d210 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
1d220 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d230 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
1d240 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1d250 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
1d260 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
1d270 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
1d280 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
1d290 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
1d2a0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1d2b0 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
1d2c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1d2d0 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  n*,Select*);.int
1d2e0 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
1d2f0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
1d300 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
1d310 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
1d320 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1d330 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
1d340 2c 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73  ,char **);.int s
1d350 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1d360 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1d370 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1d380 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1d390 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1d3a0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1d3b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1d3c0 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1d3d0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1d3e0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1d3f0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1d400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1d410 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1d420 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1d430 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1d440 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1d450 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1d460 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1d470 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1d480 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1d490 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1d4a0 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1d4b0 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1d4c0 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1d4d0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1d4e0 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1d4f0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1d500 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1d510 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1d520 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1d530 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1d540 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1d550 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1d560 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1d570 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1d580 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1d590 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d5a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1d5b0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1d5c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1d5d0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1d5e0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1d5f0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1d600 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1d610 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1d620 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1d630 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1d640 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1d650 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1d660 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1d670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1d680 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1d690 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1d6a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d6b0 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1d6c0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1d6d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d6e0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1d6f0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1d700 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1d710 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1d720 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1d730 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1d740 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1d750 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1d760 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1d770 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1d780 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1d790 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1d7a0 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
1d7b0 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
1d7c0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1d7d0 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  xprList*, Select
1d7e0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
1d7f0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
1d800 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
1d810 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
1d820 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69 6e  int,int*,int*,in
1d830 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1d840 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1d850 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1d860 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1d870 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1d880 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1d890 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1d8a0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1d8b0 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1d8c0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1d8d0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1d8e0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1d8f0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1d900 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1d910 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1d920 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1d930 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1d940 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1d950 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1d960 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1d990 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1d9a0 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1d9b0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1d9c0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1d9d0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1d9e0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1d9f0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1da00 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1da10 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1da20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1da30 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1da40 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1da50 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1da60 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1da70 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1da80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1da90 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1daa0 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1dab0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1dac0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1dad0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1dae0 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
1daf0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
1db00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
1db10 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1db20 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c      Token*, int,
1db50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1db60 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
1db70 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1db80 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1db90 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
1dba0 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1dbb0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
1dbc0 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
1dbd0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1dbe0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1dbf0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
1dc20 74 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  t*,int,Expr*,Exp
1dc30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1dc40 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
1dc50 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
1dc60 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1dc70 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
1dc80 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1dc90 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
1dca0 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
1dcb0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
1dcc0 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
1dcd0 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
1dce0 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
1dcf0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
1dd00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1dd10 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
1dd20 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
1dd30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1dd40 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
1dd50 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
1dd60 68 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72  here(Parse *, Sr
1dd70 63 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c  cList *, Expr *,
1dd80 20 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70   ExprList *, Exp
1dd90 72 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61  r *, Expr *, cha
1dda0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  r *);.#endif.voi
1ddb0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1ddc0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1ddd0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1dde0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1ddf0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1de00 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1de10 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1de20 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1de30 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 20  reBegin(Parse*, 
1de40 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  SrcList*, Expr*,
1de50 20 45 78 70 72 4c 69 73 74 2a 2a 2c 45 78 70 72   ExprList**,Expr
1de60 4c 69 73 74 2a 2c 75 31 36 29 3b 0a 76 6f 69 64  List*,u16);.void
1de70 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1de80 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1de90 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1dea0 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1deb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1dec0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1ded0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1dee0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
1def0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
1df00 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1df10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1df20 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
1df30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1df40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1df50 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
1df60 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1df70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1df80 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
1df90 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1dfa0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1dfb0 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
1dfc0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1dfd0 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
1dfe0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1dff0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
1e000 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
1e010 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e020 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1e030 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
1e040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e050 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
1e060 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
1e070 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1e080 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
1e090 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1e0a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e0b0 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
1e0c0 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
1e0d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e0e0 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
1e0f0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
1e100 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1e110 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
1e120 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
1e130 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e140 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72  odeConstants(Par
1e150 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  se*, Expr*);.int
1e160 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e170 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
1e180 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1e190 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e1a0 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
1e1b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e1c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e1d0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
1e1e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1e1f0 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
1e200 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
1e210 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1e220 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1e230 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
1e240 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
1e250 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
1e260 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
1e270 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
1e280 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
1e290 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
1e2a0 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72  *,int isView,str
1e2b0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1e2c0 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
1e2d0 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
1e2e0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1e2f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1e300 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
1e310 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
1e320 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
1e330 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1e340 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
1e350 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
1e360 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1e370 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1e380 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
1e390 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
1e3a0 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
1e3b0 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
1e3c0 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
1e3d0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
1e3e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
1e3f0 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
1e400 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  e(Expr*, Expr*);
1e410 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e420 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72  ListCompare(Expr
1e430 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e450 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
1e460 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
1e470 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1e480 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
1e490 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
1e4a0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
1e4b0 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
1e4c0 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
1e4d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
1e4e0 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
1e4f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1e500 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
1e510 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1e520 65 33 50 72 6e 67 52 65 73 65 74 53 74 61 74 65  e3PrngResetState
1e530 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1e540 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
1e550 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
1e560 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
1e570 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
1e580 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e590 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
1e5a0 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
1e5b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
1e5c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1e5d0 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
1e5e0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1e5f0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
1e600 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1e610 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e620 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
1e630 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
1e640 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
1e650 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
1e660 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1e670 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
1e680 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
1e690 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e6a0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
1e6b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e6c0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
1e6d0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
1e6e0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
1e6f0 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
1e700 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1e710 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
1e720 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
1e730 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
1e740 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
1e750 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1e760 65 33 45 78 70 72 43 6f 64 65 49 73 4e 75 6c 6c  e3ExprCodeIsNull
1e770 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63 6f 6e 73  Jump(Vdbe*, cons
1e780 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  t Expr*, int, in
1e790 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1e7a0 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
1e7b0 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
1e7c0 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
1e7d0 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
1e7e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1e7f0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1e800 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73  teRowDelete(Pars
1e810 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e820 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72 69 67 67   int, int, Trigg
1e830 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  er *, int);.void
1e840 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
1e850 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50  RowIndexDelete(P
1e860 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1e870 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  nt, int*);.int s
1e880 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
1e890 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49  dexKey(Parse*, I
1e8a0 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
1e8b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e8c0 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
1e8d0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
1e8e0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
1e8f0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 20 20 20 20 20 20 20 20 69 6e 74 2a 2c 69 6e 74          int*,int
1e920 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
1e930 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e940 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
1e950 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
1e960 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
1e970 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1e980 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
1e990 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
1e9a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1e9b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e9c0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
1e9d0 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
1e9e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1e9f0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
1ea00 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
1ea10 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
1ea20 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
1ea30 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
1ea40 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
1ea50 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29  int, char*, int)
1ea60 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1ea70 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
1ea80 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
1ea90 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
1eaa0 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
1eab0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
1eac0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1ead0 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
1eae0 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
1eaf0 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
1eb00 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
1eb10 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
1eb20 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
1eb30 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
1eb40 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
1eb50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
1eb60 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
1eb70 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
1eb80 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
1eb90 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
1eba0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1ebb0 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
1ebc0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1ebd0 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
1ebe0 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
1ebf0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1ec00 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
1ec10 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
1ec20 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1ec30 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
1ec40 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
1ec50 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1ec60 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
1ec70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
1ec80 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
1ec90 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
1eca0 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
1ecb0 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
1ecc0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
1ecd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
1ece0 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
1ecf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
1ed00 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
1ed10 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
1ed20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1ed30 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
1ed40 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
1ed50 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1ed60 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
1ed70 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
1ed80 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
1ed90 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
1eda0 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
1edd0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1ede0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
1edf0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
1ee00 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
1ee10 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1ee20 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
1ee30 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1ee40 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1ee50 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1ee60 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
1ee70 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
1ee80 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
1ee90 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
1eea0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
1eeb0 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
1eec0 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
1eed0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
1eee0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1eef0 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
1ef00 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1ef10 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1ef20 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
1ef30 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
1ef40 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ef60 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1ef70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1ef80 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1ef90 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
1efa0 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
1efb0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1efc0 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
1efd0 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
1efe0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1eff0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
1f000 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1f010 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
1f020 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
1f030 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
1f040 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1f050 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
1f060 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1f070 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
1f080 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f090 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
1f0a0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
1f0b0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1f0e0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
1f0f0 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
1f100 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f110 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
1f120 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
1f130 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
1f140 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
1f150 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f160 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
1f170 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
1f180 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1f190 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1f1a0 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
1f1b0 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
1f1c0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1f1d0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1f1e0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1f1f0 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
1f200 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
1f210 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
1f220 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
1f230 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
1f240 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
1f250 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
1f260 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
1f270 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
1f280 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
1f290 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f2a0 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
1f2b0 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
1f2c0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
1f2d0 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
1f2e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
1f2f0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
1f300 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1f310 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1f320 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
1f330 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f340 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
1f350 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
1f360 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
1f370 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f380 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
1f390 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
1f3a0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
1f3b0 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
1f3c0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
1f3d0 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
1f3e0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1f3f0 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
1f400 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
1f410 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
1f420 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
1f430 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
1f440 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1f450 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
1f460 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
1f470 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
1f480 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
1f490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
1f4a0 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
1f4b0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
1f4c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f4d0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
1f4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
1f4f0 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
1f500 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
1f510 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
1f520 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
1f530 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
1f540 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1f550 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1f560 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1f570 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
1f580 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
1f590 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
1f5a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f5b0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
1f5c0 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
1f5d0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
1f5e0 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
1f5f0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
1f600 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
1f610 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1f620 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
1f630 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
1f640 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
1f650 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
1f660 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
1f670 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
1f680 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
1f690 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f6a0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
1f6b0 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
1f6c0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
1f6d0 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
1f6e0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
1f6f0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1f700 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
1f710 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  e*, Expr*);.int 
1f720 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
1f730 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
1f740 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
1f750 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
1f760 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1f770 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
1f780 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
1f790 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
1f7a0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
1f7b0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1f7c0 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
1f7d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1f7e0 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
1f7f0 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
1f800 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f810 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
1f820 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
1f830 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
1f840 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
1f850 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
1f860 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
1f870 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
1f880 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
1f890 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f8a0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
1f8b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
1f8c0 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
1f8d0 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
1f8e0 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
1f8f0 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
1f900 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
1f910 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
1f920 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
1f930 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2c 20  Read(const u8*, 
1f940 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a  const u8**);../*
1f950 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
1f960 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
1f970 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1f980 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
1f990 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
1f9a0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
1f9b0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
1f9c0 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
1f9d0 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
1f9e0 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73  ** file.  Code s
1f9f0 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
1fa00 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c  CRO forms below,
1fa10 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32   as the Varint32
1fa20 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65   versions.** are
1fa30 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65   coded to assume
1fa40 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65   the single byte
1fa50 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79   case is already
1fa60 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20   handled (which 
1fa70 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  .** the MACRO fo
1fa80 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74  rm does)..*/.int
1fa90 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1faa0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
1fab0 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , u64);.int sqli
1fac0 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75  te3PutVarint32(u
1fad0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
1fae0 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  32);.u8 sqlite3G
1faf0 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
1fb00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
1fb10 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
1fb20 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
1fb30 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1fb40 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
1fb50 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
1fb60 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
1fb70 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61   The header of a
1fb80 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73   record consists
1fb90 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76   of a sequence v
1fba0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1fbb0 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
1fbc0 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61  e integers are a
1fbd0 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61  lmost always sma
1fbe0 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64  ll and are encod
1fbf0 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62  ed as a single b
1fc00 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  yte..** The foll
1fc10 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b  owing macros tak
1fc20 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73  e advantage this
1fc30 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65   fact to provide
1fc40 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a   a fast encode.*
1fc50 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20  * and decode of 
1fc60 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  the integers in 
1fc70 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e  a record header.
1fc80 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66    It is faster f
1fc90 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a  or the common.**
1fca0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
1fcb0 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e  integer is a sin
1fcc0 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73  gle byte.  It is
1fcd0 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72   a little slower
1fce0 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74   when the.** int
1fcf0 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d  eger is two or m
1fd00 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20  ore bytes.  But 
1fd10 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61  overall it is fa
1fd20 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ster..**.** The 
1fd30 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73  following expres
1fd40 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61  sions are equiva
1fd50 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lent:.**.**     
1fd60 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61  x = sqlite3GetVa
1fd70 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b  rint32( A, &B );
1fd80 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
1fd90 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20  te3PutVarint32( 
1fda0 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20  A, B );.**.**   
1fdb0 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33    x = getVarint3
1fdc0 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20  2( A, B );.**   
1fdd0 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33    x = putVarint3
1fde0 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f  2( A, B );.**.*/
1fdf0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
1fe00 6e 74 33 32 28 41 2c 42 29 20 20 28 75 38 29 28  nt32(A,B)  (u8)(
1fe10 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 20  (*(A)<(u8)0x80) 
1fe20 3f 20 28 28 42 29 20 3d 20 28 75 33 32 29 2a 28  ? ((B) = (u32)*(
1fe30 41 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 47  A)),1 : sqlite3G
1fe40 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20  etVarint32((A), 
1fe50 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
1fe60 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
1fe70 32 28 41 2c 42 29 20 20 28 75 38 29 28 28 28 75  2(A,B)  (u8)(((u
1fe80 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
1fe90 29 20 3f 20 28 2a 28 41 29 20 3d 20 28 75 6e 73  ) ? (*(A) = (uns
1fea0 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
1feb0 31 20 3a 20 73 71 6c 69 74 65 33 50 75 74 56 61  1 : sqlite3PutVa
1fec0 72 69 6e 74 33 32 28 28 41 29 2c 20 28 42 29 29  rint32((A), (B))
1fed0 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
1fee0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
1fef0 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
1ff00 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
1ff10 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
1ff20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
1ff30 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
1ff40 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65  Str(Vdbe *, Inde
1ff50 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  x *);.void sqlit
1ff60 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53  e3TableAffinityS
1ff70 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  tr(Vdbe *, Table
1ff80 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65   *);.char sqlite
1ff90 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79  3CompareAffinity
1ffa0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
1ffb0 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71  ar aff2);.int sq
1ffc0 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
1ffd0 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72  tyOk(Expr *pExpr
1ffe0 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e  , char idx_affin
1fff0 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ity);.char sqlit
20000 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
20010 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
20020 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
20030 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
20040 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
20050 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
20060 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
20070 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76  st char*,...);.v
20080 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
20090 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
200a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
200b0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
200c0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
200d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
200e0 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
200f0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
20100 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63   *, Token **);.c
20110 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20120 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
20130 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
20140 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
20150 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
20160 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
20170 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
20180 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
20190 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
201a0 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
201b0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
201c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
201d0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
201e0 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
201f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
20200 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
20210 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 65  r *sqlite3ExprSe
20220 74 43 6f 6c 6c 28 45 78 70 72 2a 2c 20 43 6f 6c  tColl(Expr*, Col
20230 6c 53 65 71 2a 29 3b 0a 45 78 70 72 20 2a 73 71  lSeq*);.Expr *sq
20240 6c 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c  lite3ExprSetColl
20250 42 79 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  ByToken(Parse *p
20260 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f  Parse, Expr*, To
20270 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
20280 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
20290 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
202a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
202b0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
202c0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
202d0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
202e0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
202f0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
20300 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
20310 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
20320 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
20330 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
20340 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
20350 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
20360 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
20370 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
20380 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
20390 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
203a0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
203b0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
203c0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
203d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
203e0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
203f0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
20400 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
20410 68 61 72 20 2a 7a 29 3b 0a 0a 63 6f 6e 73 74 20  har *z);..const 
20420 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
20430 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
20440 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
20450 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
20460 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
20470 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
20480 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
20490 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
204a0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
204b0 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ,u8, .          
204c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
204d0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
204e0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
204f0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
20500 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
20510 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
20520 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
20530 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
20540 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
20550 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
20560 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20  nt, u8);.#ifdef 
20570 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
20580 41 54 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  AT3.char *sqlite
20590 33 55 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65  3Utf8to16(sqlite
205a0 33 20 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c  3 *, u8, char *,
205b0 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65   int, int *);.#e
205c0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
205d0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
205e0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
205f0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
20600 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
20610 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
20620 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
20630 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
20640 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
20650 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
20660 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
20670 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
20680 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
20690 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
206a0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
206b0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
206c0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
206d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
206e0 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
206f0 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
20700 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
20710 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
20720 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
20730 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
20740 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
20750 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
20760 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
20770 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
20780 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
20790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
207a0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
207b0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
207c0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
207d0 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
207e0 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
207f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
20800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
20810 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
20820 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
20830 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
20840 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
20850 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
20860 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
20870 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
20880 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20890 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
208a0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
208b0 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
208c0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
208d0 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
208e0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
208f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
20900 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
20910 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
20920 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
20930 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
20940 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
20950 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20960 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
20970 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
20980 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
20990 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
209a0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
209b0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
209c0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
209d0 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
209e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
209f0 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
20a00 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64  qlite3ResolveOrd
20a10 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a  erGroupBy(Parse*
20a20 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c  , Select*, ExprL
20a30 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
20a40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20a50 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64  ColumnDefault(Vd
20a60 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  be *, Table *, i
20a70 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20a80 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73  qlite3AlterFinis
20a90 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  hAddColumn(Parse
20aa0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
20ab0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42  id sqlite3AlterB
20ac0 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61  eginAddColumn(Pa
20ad0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
20ae0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
20af0 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 73 71  te3GetCollSeq(sq
20b00 6c 69 74 65 33 2a 2c 20 75 38 2c 20 43 6f 6c 6c  lite3*, u8, Coll
20b10 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
20b20 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
20b30 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
20b40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
20b50 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
20b60 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
20b70 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
20b80 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
20b90 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
20ba0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20bb0 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
20bc0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20bd0 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
20be0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
20bf0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
20c00 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
20c10 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
20c20 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
20c30 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
20c40 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
20c50 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
20c60 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
20c70 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
20c80 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
20c90 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
20ca0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
20cb0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
20cc0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
20cd0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
20ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
20cf0 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
20d00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
20d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
20d20 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
20d30 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
20d40 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
20d50 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
20d60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
20d70 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
20d80 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
20d90 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
20da0 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50  e3IndexKeyinfo(P
20db0 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  arse *, Index *)
20dc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  ;.int sqlite3Cre
20dd0 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
20de0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
20df0 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
20e00 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *, .  void (*)(s
20e10 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
20e20 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
20e30 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
20e40 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
20e50 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
20e60 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
20e70 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
20e80 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
20e90 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
20ea0 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tor.);.int sqlit
20eb0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
20ec0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
20ed0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
20ee0 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
20ef0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
20f00 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
20f10 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69  Accum*, char*, i
20f20 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
20f30 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
20f40 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
20f50 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
20f60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
20f70 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
20f80 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
20f90 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
20fa0 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
20fb0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
20fc0 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
20fd0 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
20fe0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
20ff0 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
21000 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
21010 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
21020 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
21030 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
21040 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
21050 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
21060 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
21070 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
21080 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a  nst u8 *);../*.*
21090 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
210a0 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e  to the LEMON-gen
210b0 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f  erated parser.*/
210c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
210d0 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
210e0 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69  *)(size_t));.voi
210f0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
21100 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
21110 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
21120 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
21130 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
21140 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
21150 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
21160 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
21170 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
21180 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
21190 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
211a0 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
211b0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
211c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
211d0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
211e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
211f0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
21200 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
21210 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21220 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
21230 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
21240 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
21250 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
21260 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
21270 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
21280 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
21290 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
212a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
212b0 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
212c0 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
212d0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
212e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
212f0 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
21300 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
21310 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
21320 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
21330 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21340 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
21350 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21360 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
21370 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
21380 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
21390 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
213a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
213b0 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
213c0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
213d0 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
213e0 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
213f0 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20  k(X) .#  define 
21400 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
21410 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
21420 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
21430 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
21440 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
21450 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
21460 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
21470 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
21480 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
21490 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
214a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
214b0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
214c0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
214d0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
214e0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
214f0 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e   char **);.   in
21500 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
21510 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
21520 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
21530 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
21540 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
21550 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
21560 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
21570 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21580 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
21590 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
215a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
215b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
215c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
215d0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
215e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
215f0 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
21600 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
21610 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20  3*, Table*);.#  
21620 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21630 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
21640 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
21650 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
21660 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  0).#endif.void s
21670 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72  qlite3VtabMakeWr
21680 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61  itable(Parse*,Ta
21690 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ble*);.void sqli
216a0 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73  te3VtabBeginPars
216b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
216c0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
216d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
216e0 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
216f0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
21700 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21710 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
21720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
21730 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
21740 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
21750 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
21760 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
21770 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
21780 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
21790 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
217a0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
217b0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
217c0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
217d0 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
217e0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
217f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
21800 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
21810 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
21820 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
21830 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
21840 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
21850 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
21860 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
21870 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
21880 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
21890 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
218a0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73  _value**);.int s
218b0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
218c0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
218d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
218e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
218f0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
21900 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
21910 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
21920 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
21930 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
21940 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
21950 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
21960 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
21970 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
21980 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
21990 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
219a0 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
219b0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
219c0 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
219d0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
219e0 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
219f0 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
21a00 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 69  Modename(int);.i
21a10 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
21a20 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
21a30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
21a40 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
21a50 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
21a60 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
21a70 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
21a80 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
21a90 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
21aa0 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
21ab0 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
21ac0 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
21ad0 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
21ae0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
21af0 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
21b00 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
21b10 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
21b20 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
21b30 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
21b40 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
21b50 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
21b60 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
21b70 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
21b80 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
21b90 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
21ba0 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
21bb0 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
21bc0 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
21bd0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
21be0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
21bf0 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
21c00 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
21c10 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
21c20 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
21c30 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21c40 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
21c50 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
21c60 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
21c70 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
21c80 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
21c90 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
21ca0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
21cb0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
21cc0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
21cd0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
21ce0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
21cf0 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
21d00 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
21d10 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
21d20 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
21d30 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
21d40 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
21d50 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
21d60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
21d70 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
21d80 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
21d90 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
21da0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21db0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
21dc0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
21dd0 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
21de0 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
21df0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
21e00 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
21e10 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
21e20 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a 20  sk(a,b)      0. 
21e30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21e40 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
21e50 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ,d) 0.#endif.#if
21e60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21e70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76  _FOREIGN_KEY.  v
21e80 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  oid sqlite3FkDel
21e90 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54  ete(sqlite3 *, T
21ea0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  able*);.#else.  
21eb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
21ec0 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 65 6e  kDelete(a,b).#en
21ed0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
21ee0 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
21ef0 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
21f00 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
21f10 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
21f20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
21f30 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
21f40 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
21f50 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
21f60 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
21f70 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
21f80 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
21f90 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
21fa0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
21fb0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
21fc0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
21fd0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
21fe0 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
21ff0 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
22000 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
22010 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
22020 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
22030 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
22040 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
22050 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
22060 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
22070 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
22080 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
22090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
220a0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
220b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
220c0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
220d0 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66  c().#endif..#def
220e0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
220f0 49 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23  ID           1.#
22100 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
22110 45 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20  EPH             
22120 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  2.#define IN_IND
22130 45 58 5f 49 4e 44 45 58 20 20 20 20 20 20 20 20  EX_INDEX        
22140 20 20 20 33 0a 69 6e 74 20 73 71 6c 69 74 65 33     3.int sqlite3
22150 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
22160 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
22170 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
22180 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
22190 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
221a0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
221b0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
221c0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
221d0 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
221e0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
221f0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
22200 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
22210 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
22220 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
22230 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6c  te3_file *);.#el
22240 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
22250 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
22260 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73  pVfs) ((pVfs)->s
22270 7a 4f 73 46 69 6c 65 29 0a 23 65 6e 64 69 66 0a  zOsFile).#endif.
22280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
22290 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
222a0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
222b0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
222c0 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
222d0 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
222e0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
222f0 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
22300 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
22310 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
22320 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
22330 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
22340 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
22350 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
22360 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
22370 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
22380 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
22390 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
223a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
223b0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
223c0 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
223d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
223e0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
223f0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
22400 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
22410 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
22420 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
22430 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
22440 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
22450 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
22460 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
22470 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
22480 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
22490 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
224a0 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
224b0 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
224c0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
224d0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
224e0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
224f0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
22500 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
22510 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
22520 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
22530 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
22540 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22550 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
22560 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
22570 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
22580 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
22590 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
225a0 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
225b0 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
225c0 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
225d0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
225e0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
225f0 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
22600 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
22610 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
22620 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
22630 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
22640 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
22650 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
22660 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
22670 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
22680 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22690 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
226a0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
226b0 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
226c0 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
226d0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
226e0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
226f0 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
22700 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
22710 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
22720 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
22730 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
22740 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
22750 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
22760 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
22770 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
22780 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
22790 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
227a0 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
227b0 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
227c0 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
227d0 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
227e0 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
227f0 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
22800 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
22810 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
22820 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
22830 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
22840 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
22850 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
22860 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
22870 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
22880 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
22890 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
228a0 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
228b0 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
228c0 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
228d0 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
228e0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
228f0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
22900 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
22910 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
22920 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
22930 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
22940 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
22950 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
22960 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
22970 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
22980 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
22990 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
229a0 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
229b0 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
229c0 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
229d0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
229e0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
229f0 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
22a00 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
22a10 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
22a20 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
22a30 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
22a40 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
22a50 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
22a60 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
22a70 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
22a80 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
22a90 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
22aa0 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
22ab0 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
22ac0 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
22ad0 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
22ae0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
22af0 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
22b00 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
22b10 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
22b20 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
22b30 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
22b40 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
22b50 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
22b60 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
22b70 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
22b80 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
22b90 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
22ba0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
22bb0 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
22bc0 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
22bd0 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
22be0 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
22bf0 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
22c00 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
22c10 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
22c20 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
22c30 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
22c40 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
22c50 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
22c60 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
22c70 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
22c80 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
22c90 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
22ca0 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
22cb0 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
22cc0 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
22cd0 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
22ce0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
22cf0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
22d00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
22d10 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
22d20 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
22d30 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
22d40 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
22d50 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
22d60 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
22d70 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
22d80 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
22d90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22da0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
22db0 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
22dc0 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
22dd0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
22de0 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
22df0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
22e00 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
22e10 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
22e20 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
22e30 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
22e40 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
22e50 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
22e60 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
22e70 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
22e80 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   Might have been
22e90 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
22ea0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  y */.#define MEM
22eb0 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20  TYPE_SCRATCH    
22ec0 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68  0x04  /* Scratch
22ed0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
22ee0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
22ef0 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20  PCACHE     0x08 
22f00 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61   /* Page cache a
22f10 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
22f20 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42  efine MEMTYPE_DB
22f30 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f           0x10  /
22f40 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62  * Uses sqlite3Db
22f50 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69  Malloc, not sqli
22f60 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65  te_malloc */..#e
22f70 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
22f80 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.