/ Hex Artifact Content
Login

Artifact 911e2fe9bbd45c394e6396a1c00a8539285f82e6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
16e0: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
16f0: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
1700: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
1710: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
1720: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
1730: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
1740: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1760: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
1770: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
1780: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
1790: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17a0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
17b0: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
17c0: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
17d0: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
17e0: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
17f0: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
1800: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
1810: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
1820: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
1830: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
1840: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
1850: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
1860: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
1870: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
1880: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1890: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
18a0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
18b0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
18c0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
18d0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
18e0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18f0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1900: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
1910: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1920: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
1930: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
1940: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1950: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1960: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
1970: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
1980: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1990: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
19a0: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
19b0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
19c0: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
19d0: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
19e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
19f0: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
1a00: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
1a10: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
1a20: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1a30: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
1a40: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
1a50: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
1a60: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
1a70: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
1a80: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
1a90: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
1aa0: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
1ab0: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
1ac0: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
1ad0: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
1ae0: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1af0: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1b00: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1b10: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1b20: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
1b30: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
1b40: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
1b50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1b60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1b70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1b80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1b90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ba0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1bb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1bc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1bd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1be0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1bf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1c00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1c10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1c20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1c30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1c40: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
1c50: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
1c60: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
1c70: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1c80: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
1c90: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
1ca0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
1cb0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
1cc0: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
1cd0: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
1ce0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
1cf0: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
1d00: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
1d10: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
1d20: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
1d30: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
1d40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
1d50: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
1d60: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
1d70: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47  .# define NDEBUG
1d80: 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   1.#endif.#if de
1d90: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1da0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1db0: 44 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e  DEBUG).# undef N
1dc0: 44 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a  DEBUG.#endif../*
1dd0: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
1de0: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
1df0: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
1e00: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
1e10: 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76  en .** doing cov
1e20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74  erage testing, t
1e30: 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73  he condition ins
1e40: 69 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ide the argument
1e50: 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28   to.** testcase(
1e60: 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61  ) must be evalua
1e70: 74 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e  ted both true an
1e80: 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72  d false in order
1e90: 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20   to.** get full 
1ea0: 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e  branch coverage.
1eb0: 20 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29    The testcase()
1ec0: 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74   macro is insert
1ed0: 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e  ed.** to help en
1ee0: 73 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65  sure adequate te
1ef0: 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70  st coverage in p
1f00: 6c 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70  laces where simp
1f10: 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f  le.** condition/
1f20: 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67  decision coverag
1f30: 65 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e  e is inadequate.
1f40: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
1f50: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1f60: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
1f70: 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76   sure boundary v
1f80: 61 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64  alues are tested
1f90: 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73  .  For.** bitmas
1fa0: 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73  k tests, testcas
1fb0: 65 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20  e() can be used 
1fc0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63  to make sure eac
1fd0: 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e  h bit.** is sign
1fe0: 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64  ificant and used
1ff0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20   at least once. 
2000: 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65   On switch state
2010: 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d  ments.** where m
2020: 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f  ultiple cases go
2030: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f   to the same blo
2040: 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74  ck of code, test
2050: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e  case().** can in
2060: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61  sure that all ca
2070: 73 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ses are evaluate
2080: 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20  d..**.*/.#ifdef 
2090: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
20a0: 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
20b0: 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29  te3Coverage(int)
20c0: 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63  ;.# define testc
20d0: 61 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b  ase(X)  if( X ){
20e0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20f0: 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65  (__LINE__); }.#e
2100: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73  lse.# define tes
2110: 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a  tcase(X).#endif.
2120: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f  ./*.** The TESTO
2130: 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65  NLY macro is use
2140: 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72  d to enclose var
2150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
2160: 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62  ns or.** other b
2170: 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74  its of code that
2180: 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73   are needed to s
2190: 75 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d  upport the argum
21a0: 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  ents.** within t
21b0: 65 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73  estcase() and as
21c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a  sert() macros..*
21d0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e  /.#if !defined(N
21e0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
21f0: 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  d(SQLITE_COVERAG
2200: 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  E_TEST).# define
2210: 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a   TESTONLY(X)  X.
2220: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54  #else.# define T
2230: 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  ESTONLY(X).#endi
2240: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d  f../*.** Sometim
2250: 65 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61  es we need a sma
2260: 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64  ll amount of cod
2270: 65 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69  e such as a vari
2280: 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  able initializat
2290: 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20  ion.** to setup 
22a0: 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65  for a later asse
22b0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20  rt() statement. 
22c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
22d0: 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20  this code to.** 
22e0: 61 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65  appear when asse
22f0: 72 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64  rt() is disabled
2300: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
2310: 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66   macro is theref
2320: 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  ore.** used to c
2330: 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75  ontain that setu
2340: 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56  p code.  The "VV
2350: 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64  A" acronym stand
2360: 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69  s for.** "Verifi
2370: 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
2380: 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74  on, and Accredit
2390: 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65  ation".  In othe
23a0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20  r words, the.** 
23b0: 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f  code within VVA_
23c0: 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79  ONLY() will only
23d0: 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69   run during veri
23e0: 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  fication process
23f0: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e  es..*/.#ifndef N
2400: 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56  DEBUG.# define V
2410: 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65  VA_ONLY(X)  X.#e
2420: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41  lse.# define VVA
2430: 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a  _ONLY(X).#endif.
2440: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59  ./*.** The ALWAY
2450: 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72  S and NEVER macr
2460: 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c  os surround bool
2470: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ean expressions 
2480: 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e  which .** are in
2490: 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73  tended to always
24a0: 20 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73   be true or fals
24b0: 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
24c0: 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73    Such.** expres
24d0: 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f  sions could be o
24e0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
24f0: 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e  code completely.
2500: 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72    But they.** ar
2510: 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20  e included in a 
2520: 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64  few cases in ord
2530: 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68  er to enhance th
2540: 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20  e resilience.** 
2550: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65  of SQLite to une
2560: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
2570: 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63   - to make the c
2580: 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e  ode "self-healin
2590: 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c  g".** or "ductil
25a0: 65 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62  e" rather than b
25b0: 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61  eing "brittle" a
25c0: 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74  nd crashing at t
25d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74  he first.** hint
25e0: 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65   of unplanned be
25f0: 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e  havior..**.** In
2600: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c   other words, AL
2610: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
2620: 72 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66  re added for def
2630: 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a  ensive code..**.
2640: 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f  ** When doing co
2650: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41  verage testing A
2660: 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20  LWAYS and NEVER 
2670: 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74  are hard-coded t
2680: 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64  o.** be true and
2690: 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74   false so that t
26a0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63  he unreachable c
26b0: 6f 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79  ode they specify
26c0: 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20   will.** not be 
26d0: 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73  counted as untes
26e0: 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ted code..*/.#if
26f0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2700: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23  COVERAGE_TEST).#
2710: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
2720: 29 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66  )      (1).# def
2730: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
2740: 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65     (0).#elif !de
2750: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20  fined(NDEBUG).# 
2760: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
2770: 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73        ((X)?1:(as
2780: 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65  sert(0),0)).# de
2790: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27a0: 20 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74      ((X)?(assert
27b0: 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a  (0),1):0).#else.
27c0: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
27d0: 58 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65  X)      (X).# de
27e0: 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20  fine NEVER(X)   
27f0: 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a      (X).#endif..
2800: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
2810: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
2820: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 69  the input is a i
2830: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
2840: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
2850: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
2860: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
2870: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
2880: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
2890: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
28a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
28b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
28c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
28d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
28e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
28f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
2900: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
2910: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
2920: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
2930: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
2940: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
2950: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
2960: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
2970: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
2980: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
2990: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
29b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
29c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
29d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
29e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
29f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
2a00: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
2a10: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
2a20: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
2a30: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
2a40: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
2a50: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
2a60: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
2a70: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
2a80: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
2a90: 22 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ".#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
3c00: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
3c10: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
3c20: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
3c30: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
3c40: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
3c50: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
3c60: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
3c70: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
3c80: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
3c90: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
3ca0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3cb0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
3cc0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
3cd0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
3ce0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
3cf0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
3d20: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
3d30: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
3d40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3d50: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
3d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
3d70: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
3d80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
3d90: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
3da0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
3db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
3dc0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
3dd0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3de0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
3df0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
3e00: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
3e10: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
3e20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3e30: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
3e40: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
3e50: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
3e60: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
3e70: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
3e80: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
3e90: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
3ea0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
3eb0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3ec0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
3ed0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
3ee0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
3ef0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
3f00: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
3f10: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
3f20: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
3f30: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
3f40: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
3f50: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
3f60: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
3f70: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
3f80: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
3f90: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
3fa0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
3fb0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
3fc0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
3fd0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
3fe0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
3ff0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4000: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4010: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4020: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4030: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4040: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4050: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4060: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4070: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4080: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4090: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
40a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
40b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
40c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
40d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
40e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
40f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4100: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4110: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4120: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4130: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4140: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4150: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4160: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4170: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4180: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4190: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
41a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
41b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
41c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
41d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
41e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
41f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4200: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4210: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4220: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4230: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4240: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4250: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4260: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4270: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4280: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4290: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
42a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
42b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
42c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
42d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
42e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
42f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4300: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4310: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4320: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4330: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4340: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4350: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4360: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4370: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4380: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4390: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
43a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
43b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
43c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
43d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
43e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
43f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4400: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4410: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4420: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4430: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4440: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4450: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4460: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4470: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4480: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4490: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
44a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
44b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
44c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
44d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
44e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
44f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4500: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4510: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4520: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4530: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4540: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4550: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4560: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4570: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4580: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4590: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
45a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
45b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
45c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
45d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
45e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
45f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4600: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4610: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4620: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4630: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4640: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4650: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4660: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4670: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4680: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4690: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
46a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
46b0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
46c0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
46d0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
46e0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
46f0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4700: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4710: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4720: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4730: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4740: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4750: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4760: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4770: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
4780: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
4790: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
47a0: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
47b0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
47c0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
47d0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
47e0: 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a  e handle. .**.**
47f0: 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79   The sqlite.busy
4800: 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f  Handler member o
4810: 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72  f the sqlite str
4820: 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  uct contains the
4830: 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63   busy.** callbac
4840: 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  k for the databa
4850: 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20  se handle. Each 
4860: 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61  pager opened via
4870: 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68   the sqlite.** h
4880: 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20  andle is passed 
4890: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  a pointer to sql
48a0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e  ite.busyHandler.
48b0: 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65   The busy-handle
48c0: 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73  r.** callback is
48d0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b   currently invok
48e0: 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74  ed only from wit
48f0: 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a  hin pager.c..*/.
4900: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
4910: 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48  usyHandler BusyH
4920: 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42  andler;.struct B
4930: 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69  usyHandler {.  i
4940: 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64  nt (*xFunc)(void
4950: 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65   *,int);  /* The
4960: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4970: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20  /.  void *pArg; 
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4990: 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62  * First arg to b
49a0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
49b0: 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20    int nBusy;    
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
49d0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
49e0: 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20   each busy call 
49f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d  */.};../*.** Nam
4a00: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4a10: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20  database table. 
4a20: 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   The master data
4a30: 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73  base table.** is
4a40: 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65   a special table
4a50: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
4a60: 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62  names and attrib
4a70: 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75  utes of all.** u
4a80: 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ser tables and i
4a90: 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ndices..*/.#defi
4aa0: 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  ne MASTER_NAME  
4ab0: 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73       "sqlite_mas
4ac0: 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d  ter".#define TEM
4ad0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22  P_MASTER_NAME  "
4ae0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4af0: 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  er"../*.** The r
4b00: 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
4b10: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4b20: 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  table..*/.#defin
4b30: 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20  e MASTER_ROOT   
4b40: 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
4b50: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68   name of the sch
4b60: 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ema table..*/.#d
4b70: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42  efine SCHEMA_TAB
4b80: 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54  LE(x)  ((!OMIT_T
4b90: 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54  EMPDB)&&(x==1)?T
4ba0: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a  EMP_MASTER_NAME:
4bb0: 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a  MASTER_NAME)../*
4bc0: 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63  .** A convenienc
4bd0: 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74  e macro that ret
4be0: 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
4bf0: 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a  of elements in.*
4c00: 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23  * an array..*/.#
4c10: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
4c20: 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69  (X)    ((int)(si
4c30: 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58  zeof(X)/sizeof(X
4c40: 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65  [0])))../*.** De
4c50: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61  termine if the a
4c60: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77  rgument is a pow
4c70: 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65  er of two.*/.#de
4c80: 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77  fine IsPowerOfTw
4c90: 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d  o(X) (((X)&((X)-
4ca0: 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  1))==0)../*.** T
4cb0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c  he following val
4cc0: 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74  ue as a destruct
4cd0: 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20  or means to use 
4ce0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e  sqlite3DbFree().
4cf0: 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44  .** The sqlite3D
4d00: 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20  bFree() routine 
4d10: 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72  requires two par
4d20: 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20  ameters instead 
4d30: 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70  of the .** one p
4d40: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65  arameter that de
4d50: 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c  structors normal
4d60: 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20  ly want.  So we 
4d70: 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63  have to introduc
4d80: 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63  e .** this magic
4d90: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
4da0: 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61  code knows to ha
4db0: 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79  ndle differently
4dc0: 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74  .  Any .** point
4dd0: 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72  er will work her
4de0: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20  e as long as it 
4df0: 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  is distinct from
4e00: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a   SQLITE_STATIC.*
4e10: 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41  * and SQLITE_TRA
4e20: 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69  NSIENT..*/.#defi
4e30: 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49  ne SQLITE_DYNAMI
4e40: 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65  C   ((sqlite3_de
4e50: 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71  structor_type)sq
4e60: 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29  lite3MallocSize)
4e70: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
4e80: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
4e90: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
4ea0: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
4eb0: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
4ec0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
4ed0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
4ee0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
4ef0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
4f00: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
4f10: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
4f20: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
4f30: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
4f40: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
4f50: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
4f60: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
4f70: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
4f80: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
4f90: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
4fa0: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
4fb0: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
4fc0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
4fd0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
4fe0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
4ff0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
5000: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
5010: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
5020: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
5030: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
5040: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
5050: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
5060: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
5070: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
5080: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
5090: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
50a0: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
50b0: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
50c0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
50d0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
50e0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
50f0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
5100: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
5110: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
5120: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
5130: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
5140: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
5150: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
5160: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
5170: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
5180: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
5190: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
51a0: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
51b0: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
51c0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
51d0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
51e0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
51f0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
5200: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5210: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
5220: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
5230: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
5240: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
5250: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
5260: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
5270: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5280: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
5290: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
52a0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20  e SQLITE_WSD .  
52b0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
52c0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
52d0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
52e0: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
52f0: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
5300: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
5310: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
5320: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
5330: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
5340: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
5350: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
5360: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
5370: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
5380: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a  s deliberately .
5390: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
53a0: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
53b0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
53c0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
53d0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
53e0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
53f0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
5400: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
5410: 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c  ple the .** impl
5420: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
5430: 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73   SQL aggregate s
5440: 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  tep callback may
5450: 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20   not use the.** 
5460: 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61  parameter indica
5470: 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20  ting the number 
5480: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
5490: 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65  sed to the aggre
54a0: 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b  gate,.** if it k
54b0: 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69  nows that this i
54c0: 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77  s enforced elsew
54d0: 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  here..**.** When
54e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
54f0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
5500: 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20  d at all within 
5510: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
5520: 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73  nction,.** it is
5530: 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64   generally named
5540: 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e   "NotUsed" or "N
5550: 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65  otUsed2" to make
5560: 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65   things even cle
5570: 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72  arer..** However
5580: 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d  , these macros m
5590: 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ay also be used 
55a0: 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e  to suppress warn
55b0: 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a  ings related to.
55c0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  ** parameters th
55d0: 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  at may or may no
55e0: 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64  t be used depend
55f0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69  ing on compilati
5600: 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46  on options..** F
5610: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65  or example those
5620: 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79   parameters only
5630: 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28   used in assert(
5640: 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e  ) statements. In
5650: 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20   these.** cases 
5660: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61  the parameters a
5670: 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20  re named as per 
5680: 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e  the usual conven
5690: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
56a0: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
56b0: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
56c0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
56d0: 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55  ARAMETER2(x,y) U
56e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
56f0: 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  x),UNUSED_PARAME
5700: 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f  TER(y)../*.** Fo
5710: 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73  rward references
5720: 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a   to structures.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f   AggInfo AggInfo
5750: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5760: 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74   AuthContext Aut
5770: 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  hContext;.typede
5780: 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  f struct Autoinc
5790: 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f  Info AutoincInfo
57a0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
57b0: 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a   Bitvec Bitvec;.
57c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57d0: 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a  ollSeq CollSeq;.
57e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
57f0: 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79  olumn Column;.ty
5800: 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20  pedef struct Db 
5810: 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  Db;.typedef stru
5820: 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61  ct Schema Schema
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65   Expr Expr;.type
5850: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c  def struct ExprL
5860: 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79  ist ExprList;.ty
5870: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5880: 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a  rSpan ExprSpan;.
5890: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
58a0: 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65  Key FKey;.typede
58b0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  f struct FuncDes
58c0: 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74  tructor FuncDest
58d0: 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20  ructor;.typedef 
58e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46  struct FuncDef F
58f0: 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20  uncDef;.typedef 
5900: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
5910: 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a  sh FuncDefHash;.
5920: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5930: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
5940: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
5950: 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65  ex Index;.typede
5960: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  f struct IndexSa
5970: 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65  mple IndexSample
5980: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5990: 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61   KeyClass KeyCla
59a0: 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ss;.typedef stru
59b0: 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e  ct KeyInfo KeyIn
59c0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
59d0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f  ct Lookaside Loo
59e0: 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20  kaside;.typedef 
59f0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
5a00: 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  Slot LookasideSl
5a10: 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ot;.typedef stru
5a20: 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65  ct Module Module
5a30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a40: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d   NameContext Nam
5a50: 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  eContext;.typede
5a60: 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50  f struct Parse P
5a70: 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74  arse;.typedef st
5a80: 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53  ruct RowSet RowS
5a90: 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  et;.typedef stru
5aa0: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76  ct Savepoint Sav
5ab0: 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20  epoint;.typedef 
5ac0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
5ad0: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
5ae0: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
5af0: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
5b00: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
5b10: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
5b20: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
5b30: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
5b50: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
5b60: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
5b70: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
5b80: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
5b90: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
5ba0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bb0: 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65   Trigger;.typede
5bc0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
5bd0: 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a  Prg TriggerPrg;.
5be0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
5bf0: 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67  riggerStep Trigg
5c00: 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20  erStep;.typedef 
5c10: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
5c20: 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65  ecord UnpackedRe
5c30: 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74  cord;.typedef st
5c40: 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62  ruct VTable VTab
5c50: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5c60: 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62 43  ct VtabCtx VtabC
5c70: 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  tx;.typedef stru
5c80: 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72  ct Walker Walker
5c90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ca0: 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65   WhereInfo Where
5cb0: 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  Info;../*.** Def
5cc0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
5cd0: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
5ce0: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
5cf0: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
5d00: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
5d10: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
5d20: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
5d30: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
5d40: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
5d50: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
5d60: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
5d70: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
5d80: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
5d90: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
5da0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
5db0: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
5dc0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
5dd0: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
5de0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
5df0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
5e00: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
5e10: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
5e20: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
5e30: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
5e40: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
5e50: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
5e60: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
5e70: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
5e80: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
5e90: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
5ea0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
5eb0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
5ec0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5ed0: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
5ee0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
5ef0: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
5f00: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
5f10: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
5f20: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
5f30: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
5f50: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
5f60: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
5f70: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
5f80: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
5f90: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
5fa0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
5fb0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5fc0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5fd0: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5fe0: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5ff0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
6000: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
6010: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6020: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
6030: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
6040: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
6050: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
6060: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
6070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6080: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
6090: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
60a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
60b0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
60c0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
60d0: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
60e0: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
60f0: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
6100: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
6110: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
6120: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
6130: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
6140: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
6150: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
6160: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
6170: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
6180: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
6190: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
61a0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
61b0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
61c0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
61d0: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
61e0: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
61f0: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
6200: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
6210: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
6220: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
6230: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
6240: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
6250: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
6260: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
6270: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
6280: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
6290: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
62a0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
62b0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
62c0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
62d0: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
62e0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
62f0: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6300: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6310: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6320: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6330: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6340: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6350: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6360: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
6370: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
6380: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
6390: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
63a0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
63b0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
63c0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
63d0: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
63e0: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
63f0: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6400: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6410: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6420: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6430: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6440: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6450: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6460: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
6470: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
6480: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
6490: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
64a0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
64b0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
64c0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
64d0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
64e0: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
64f0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6500: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6510: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6520: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6530: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6540: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6550: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6560: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
6570: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
6580: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
6590: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
65a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
65b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
65c0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
65d0: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
65e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
65f0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6600: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6610: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6620: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6630: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6640: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6650: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6660: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
6670: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
6680: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
6690: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
66a0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
66b0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
66c0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
66d0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
66e0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
66f0: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6700: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6710: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6720: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6730: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6740: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6750: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6760: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
6770: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6780: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
6790: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
67a0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
67b0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
67c0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
67d0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
67e0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
67f0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6800: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6810: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6820: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6840: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6850: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6860: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
6870: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
6880: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
6890: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
68a0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
68b0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
68c0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
68d0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
68e0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
68f0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6900: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6910: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6920: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6930: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6940: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6950: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6960: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
6970: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
6980: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
6990: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
69a0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
69b0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
69c0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
69d0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
69e0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
69f0: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6a00: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6a10: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6a20: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6a30: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6a40: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6a50: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6a60: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
6a70: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
6a80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
6a90: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
6aa0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
6ab0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
6ac0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6ad0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6ae0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6af0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6b00: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6b10: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6b20: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6b30: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6b40: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6b50: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6b60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6b70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
6b80: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
6b90: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
6ba0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
6bb0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
6bc0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6bd0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6be0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6bf0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6c00: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6c10: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6c20: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6c30: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6c40: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6c50: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6c60: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
6c70: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
6c80: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
6c90: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
6ca0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
6cb0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
6cc0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6cd0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6ce0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6cf0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6d00: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6d10: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6d20: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6d30: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6d40: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6d50: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6d60: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6d70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6d80: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6d90: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6da0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6db0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6dc0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6dd0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6de0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6df0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6e00: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6e10: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6e20: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6e30: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6e50: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6e60: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6e70: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6e80: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6e90: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6ea0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6eb0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6ec0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6ed0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6ee0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6ef0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6f00: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6f10: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6f20: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6f30: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6f40: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6f50: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6f60: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6f70: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6f80: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6f90: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6fa0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6fb0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6fc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6fd0: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6fe0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6ff0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
7000: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
7010: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
7020: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
7030: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
7040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
7050: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
7060: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
7070: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
7080: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
7090: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
70a0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
70b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
70c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
70d0: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
70e0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
70f0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
7100: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
7110: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
7120: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
7130: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
7140: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
7150: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
7160: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
7170: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
7180: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
7190: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
71a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
71b0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
71c0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
71d0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
71e0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
71f0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
7200: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
7210: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
7220: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
7230: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
7240: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
7250: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
7260: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
7270: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
7280: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
7290: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
72a0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
72b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
72c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
72d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
72e0: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
72f0: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7300: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7320: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7330: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7340: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7350: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7360: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
7370: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
7380: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
7390: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
73a0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
73b0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
73c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
73d0: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
73e0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
73f0: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7400: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7420: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7430: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7450: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7460: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
7470: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
7480: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
7490: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
74a0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
74b0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
74c0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
74e0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
74f0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7500: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
7510: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
7520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
7530: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
7540: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
7550: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7560: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7570: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7580: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7590: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
75a0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
75b0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
75c0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
75d0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
75e0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
7600: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7610: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7620: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7630: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7650: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7660: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7670: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7680: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
76a0: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
76b0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
76c0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
76d0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
76e0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
76f0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
7700: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7710: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7720: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7730: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7740: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7750: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7760: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7770: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7780: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7790: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
77a0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
77b0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
77c0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
77d0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
77e0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
77f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
7800: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7810: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7820: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7830: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7840: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7850: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7860: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7870: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7880: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7890: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
78a0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
78b0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
78c0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
78d0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
78e0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
78f0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
7900: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7930: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7940: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7950: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7980: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7990: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79a0: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
79b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
79c0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
79d0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
79e0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
79f0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
7a00: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7a10: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7a20: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7a30: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7a40: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7a50: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7a60: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7a70: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7a80: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7a90: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7aa0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
7ab0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ad0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
7ae0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
7af0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
7b00: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7b10: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7b20: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7b30: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7b40: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7b50: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7b60: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7b70: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7b80: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7b90: 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41  it;.  int nVdbeA
7ba0: 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20  ctive;          
7bb0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7bc0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
7bd0: 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   running */.  in
7be0: 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20  t nVdbeRead;    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c00: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c10: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c20: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  or write */.  in
7c30: 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20  t nVdbeWrite;   
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c50: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7c60: 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20  VDBEs that read 
7c70: 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69  and write */.  i
7c80: 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20  nt nVdbeExec;   
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ca0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
7cb0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
7cc0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
7cd0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
7ce0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7cf0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
7d00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
7d10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
7d20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
7d30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
7d40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
7d50: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
7d60: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
7d70: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
7d80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7d90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
7da0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7dc0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
7dd0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
7de0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
7df0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
7e00: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
7e10: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
7e20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7e30: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
7e60: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
7e70: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
7e80: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
7e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ea0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
7eb0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7ec0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
7ed0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
7ee0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
7ef0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
7f10: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7f30: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
7f40: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7f50: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
7f60: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
7f70: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
7f80: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7f90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
7fa0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
7fb0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
7fc0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
7fd0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
7fe0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
7ff0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
8000: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
8010: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
8020: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
8030: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
8040: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
8050: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
8060: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8070: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
8080: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
8090: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
80a0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
80b0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
80c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
80d0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
80e0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
80f0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
8100: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
8110: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8120: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8130: 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20  ssage */.  char 
8140: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
8150: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
8160: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
8170: 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63  ssage (UTF-8 enc
8180: 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20  oded) */.  char 
8190: 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20  *zErrMsg16;     
81a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
81b0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
81c0: 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e  ssage (UTF-16 en
81d0: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f  coded) */.  unio
81e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
81f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8200: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8210: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
8220: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
8230: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
8240: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
8250: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
8260: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
8270: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
8280: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
8290: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
82a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
82b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
82c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
82d0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
82e0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
82f0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8300: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8310: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8340: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8350: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8360: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8380: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8390: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
83a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
83b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
83c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
83d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
83e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
83f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8400: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8410: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8420: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8430: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8440: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8450: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8460: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8470: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8480: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8490: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
84a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
84b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
84c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
84d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
84e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
84f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8500: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8510: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8520: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8530: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8540: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8550: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8560: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8570: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8580: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8590: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
85a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
85b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
85e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
85f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8600: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8610: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8620: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8630: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8640: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8650: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8660: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8670: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8680: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8690: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
86a0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
86b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
86c0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
86d0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
86e0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
86f0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8700: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8710: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8720: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8730: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8740: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8750: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8760: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8770: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8780: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8790: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
87a0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
87b0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
87c0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
87d0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
87e0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
87f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8800: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8810: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8820: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8830: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8840: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8850: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8860: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8870: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8880: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8890: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
88a0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
88b0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
88c0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
88d0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
88e0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
88f0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
8900: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
8910: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8930: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8940: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8950: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8970: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8980: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8990: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
89a0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
89b0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
89c0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
89d0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
89e0: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
89f0: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
8a00: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
8a10: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
8a20: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
8a30: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
8a40: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
8a50: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
8a60: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
8a70: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
8a80: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
8a90: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
8aa0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
8ab0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
8ac0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
8ad0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
8ae0: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
8af0: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
8b00: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
8b10: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
8b20: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
8b30: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
8b40: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
8b50: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
8b60: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
8b70: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
8b80: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8b90: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
8ba0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
8bb0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
8bc0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
8bd0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8be0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
8bf0: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
8c00: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
8c10: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
8c20: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
8c30: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
8c40: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
8c50: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
8c60: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
8c70: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
8c80: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
8c90: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
8ca0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
8cb0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
8cc0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
8cd0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
8ce0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
8cf0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
8d00: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
8d10: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
8d20: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
8d30: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
8d40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
8d50: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
8d60: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
8d70: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
8d80: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
8d90: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
8da0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
8db0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
8dc0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
8dd0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
8de0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
8df0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
8e00: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
8e10: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
8e20: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
8e30: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
8e40: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
8e50: 30 38 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  08  /* Show shor
8e60: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
8e70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8e80: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
8e90: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
8ea0: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
8eb0: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
8ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
8ef0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
8f00: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
8f40: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
8f50: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
8f60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
8f70: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
8f80: 30 30 30 30 32 30 20 20 2f 2a 20 49 6e 76 6f 6b  000020  /* Invok
8f90: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
8fa0: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
8fe0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
8ff0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9000: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
9010: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
9020: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
9030: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
9040: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9050: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
9060: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
9070: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
9080: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
9090: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
90a0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
90b0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
90c0: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
90d0: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
90e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
90f0: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30 30  eAddopTrace 0x00
9100: 30 30 30 32 30 30 20 20 2f 2a 20 54 72 61 63 65  000200  /* Trace
9110: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9120: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
9130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
9140: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
9150: 30 30 34 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00400  /* Do not
9160: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
9170: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
9180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
9190: 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30  dUncommitted 0x0
91a0: 30 30 30 38 30 30 20 20 2f 2a 20 46 6f 72 20 73  000800  /* For s
91b0: 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
91c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
91d0: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
91e0: 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a    0x00001000  /*
91f0: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
9200: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
9210: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
9220: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
9230: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
9240: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
9250: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
9260: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9270: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
9280: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
9290: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
92a0: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
92b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
92c0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
92d0: 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 49 67  x00008000  /* Ig
92e0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
92f0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
9300: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
9310: 72 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  r   0x00010000  
9320: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
9330: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
9340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
9350: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
9360: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45 6e 61  00020000  /* Ena
9370: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
9380: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
9390: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
93a0: 4b 65 79 73 20 20 20 20 30 78 30 30 30 34 30 30  Keys    0x000400
93b0: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
93c0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
93d0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
93e0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
93f0: 64 65 78 20 20 20 20 20 20 30 78 30 30 30 38 30  dex      0x00080
9400: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
9410: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
9420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9430: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
9440: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9450: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
9460: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
9490: 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00200000  /* En
94a0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
94b0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
94c0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
94d0: 67 65 72 20 20 30 78 30 30 34 30 30 30 30 30 20  ger  0x00400000 
94e0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
94f0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
9500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
9510: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
9520: 30 38 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0800000  /* Defe
9530: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
9540: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9550: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
9560: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9570: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
9580: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
9590: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66  .../*.** Bits of
95a0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f   the sqlite3.dbO
95b0: 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68  ptFlags field th
95c0: 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74  at are used by t
95d0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  he.** sqlite3_te
95e0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
95f0: 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
9600: 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e  IZATIONS,...) in
9610: 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65  terface to.** se
9620: 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c  lectively disabl
9630: 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
9640: 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  zations..*/.#def
9650: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
9660: 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31  Flattener 0x0001
9670: 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74     /* Query flat
9680: 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  tening */.#defin
9690: 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43  e SQLITE_ColumnC
96a0: 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20  ache    0x0002  
96b0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65   /* Column cache
96c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
96d0: 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20  TE_GroupByOrder 
96e0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52    0x0004   /* GR
96f0: 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f  OUPBY cover of O
9700: 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e  RDERBY */.#defin
9710: 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f  e SQLITE_FactorO
9720: 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20  utConst 0x0008  
9730: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63   /* Constant fac
9740: 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  toring */.#defin
9750: 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  e SQLITE_IdxReal
9760: 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20 20  AsInt   0x0010  
9770: 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20 61   /* Store REAL a
9780: 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65 73  s INT in indices
9790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
97a0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
97b0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
97c0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
97d0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
97e0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
97f0: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
9800: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
9810: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
9820: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
9830: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
9840: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
9850: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
9860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9870: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
9880: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
9890: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
98a0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
98b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
98c0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
98d0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
98e0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
98f0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9900: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
9910: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
9920: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
9930: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
9940: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
9950: 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78 30  at3          0x0
9960: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65  800   /* Use the
9970: 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61   SQLITE_STAT3 ta
9980: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
9990: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
99a0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
99b0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
99c0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
99d0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
99e0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
99f0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9a00: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
9a10: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
9a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
9a30: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
9a40: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
9a50: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
9a60: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
9a70: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
9a80: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9a90: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
9aa0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
9ab0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
9ac0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9ad0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9ae0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9af0: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9b00: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9b10: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9b20: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9b30: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9b40: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9b50: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9b60: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9b70: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9b80: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9b90: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9ba0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9bb0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9bc0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9bd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9be0: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9bf0: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9c00: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9c10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9c20: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9c30: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9c40: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9c50: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9c60: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9c70: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9c80: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9c90: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9ca0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9cb0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9cc0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9cd0: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9ce0: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9cf0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9d00: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9d10: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9d20: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9d30: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9d40: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9d50: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9d60: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9d70: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9d80: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9d90: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9da0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9db0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9dc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9dd0: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9de0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9df0: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9e00: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9e10: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9e20: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9e30: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9e40: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9e50: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9e60: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9e70: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9e80: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9e90: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9ea0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9ec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9ed0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9ee0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9ef0: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9f00: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9f10: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9f20: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9f30: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9f40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9f50: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9f60: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9f70: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9f80: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9f90: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9fa0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9fb0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9fc0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9fd0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9fe0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9ff0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
a000: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
a010: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
a020: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
a030: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
a040: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a050: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a060: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a070: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a080: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a090: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a0a0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a0b0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a0c0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a0d0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a0e0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a0f0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a100: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a110: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a120: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a130: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a140: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a150: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a160: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a170: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a180: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a190: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a1a0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a1b0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a1c0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a1d0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a1e0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a1f0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a200: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a210: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a220: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a230: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a240: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a250: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a260: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a270: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a280: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a290: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a2a0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a2b0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a2c0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a2d0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a2e0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a2f0: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a300: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a310: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a320: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a330: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a340: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a350: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a360: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a370: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a380: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a390: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a3a0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a3b0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a3c0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a3d0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a3e0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a3f0: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a400: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a410: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a420: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a430: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a440: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a450: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a460: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a470: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a480: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a490: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a4a0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a4b0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a4c0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a4d0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a4e0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a4f0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a500: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a510: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a520: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a530: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a540: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a550: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a560: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a570: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a580: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a590: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a5a0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a5b0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a5c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a5d0: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a5e0: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a5f0: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a600: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a610: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a620: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a630: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a640: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a650: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a660: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a670: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a680: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a690: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6a0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a6b0: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a6c0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a6d0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a6e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a6f0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a700: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a710: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a720: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a730: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a740: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a750: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a760: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a770: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a780: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a790: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a7a0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a7b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a7c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a7d0: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a7e0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a7f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a800: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a810: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a820: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a830: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a840: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a850: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a860: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a870: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a880: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a890: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a8a0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a8b0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a8c0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a8d0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a8e0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a8f0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a900: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a910: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a920: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a930: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a940: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a950: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a960: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a970: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a980: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a990: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a9a0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a9b0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a9c0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a9d0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a9e0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a9f0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
aa00: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
aa10: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
aa20: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
aa30: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
aa40: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
aa50: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
aa60: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
aa70: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
aa80: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
aa90: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
aaa0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
aab0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
aac0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aad0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aae0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aaf0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
ab00: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
ab10: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
ab20: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
ab30: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
ab40: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
ab50: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
ab60: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
ab70: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
ab80: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
ab90: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
aba0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
abb0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
abc0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
abd0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
abe0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
abf0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ac00: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
ac10: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
ac20: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
ac30: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
ac40: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
ac50: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ac60: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
ac70: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
ac80: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
ac90: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
aca0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
acb0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
acc0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
acd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ace0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
acf0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ad00: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ad10: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
ad20: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ad30: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ad40: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ad50: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ad60: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ad70: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ad80: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
ad90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ada0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
adb0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
adc0: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
add0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ade0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
adf0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ae00: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ae10: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae20: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae30: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
ae40: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ae50: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ae60: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ae70: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
ae80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
ae90: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
aea0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
aeb0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
aec0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
aed0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
aee0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
aef0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
af00: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
af10: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
af20: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
af30: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
af40: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
af50: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
af60: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
af70: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
af80: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
af90: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
afa0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
afb0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
afc0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
afd0: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
afe0: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
aff0: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
b000: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
b010: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
b020: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
b030: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
b040: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
b050: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
b060: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
b070: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
b080: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
b090: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
b0a0: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
b0b0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b0c0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b0d0: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b0e0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b110: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b120: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b130: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b150: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b160: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b170: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
b180: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
b190: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b1a0: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
b1b0: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
b1c0: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1e0: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
b1f0: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
b200: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
b210: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
b220: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
b230: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
b240: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
b250: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
b260: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
b270: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
b280: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
b290: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
b2a0: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
b2b0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b2c0: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
b2d0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
b2e0: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
b2f0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
b300: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
b310: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
b320: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
b330: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
b340: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
b350: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
b360: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
b370: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
b380: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
b390: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
b3a0: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
b3b0: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
b3c0: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
b3d0: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
b3e0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
b410: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
b420: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
b430: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b450: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
b460: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
b470: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
b480: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
b490: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
b4a0: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
b4b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
b4c0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
b4d0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
b4e0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
b4f0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
b500: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
b510: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
b520: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
b530: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
b540: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
b550: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
b560: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
b570: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
b580: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
b590: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
b5a0: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
b5b0: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
b5c0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
b5d0: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
b5e0: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
b5f0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
b600: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
b610: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
b620: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
b630: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
b640: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
b650: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
b660: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
b670: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
b680: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
b690: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
b6a0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
b6b0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
b6c0: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
b6d0: 31 36 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  16 colFlags;    
b6e0: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
b6f0: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
b700: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
b710: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
b720: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
b730: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
b740: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
b750: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
b760: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
b770: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
b780: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
b790: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
b7a0: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
b7b0: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
b7c0: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
b7d0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
b7e0: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
b7f0: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
b800: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
b810: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
b820: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
b830: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
b840: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
b850: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
b860: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
b870: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
b880: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
b890: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
b8a0: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
b8b0: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
b8c0: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
b8d0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
b8e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b8f0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
b900: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
b910: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
b920: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
b930: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
b940: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
b950: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
b960: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
b970: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
b980: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
b990: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b9a0: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
b9b0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
b9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
b9d0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
b9e0: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
b9f0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
ba00: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
ba10: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
ba20: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
ba30: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
ba40: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
ba50: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
ba60: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
ba70: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
ba80: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
ba90: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
baa0: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
bab0: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
bac0: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
bad0: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
bae0: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
baf0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
bb00: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
bb10: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
bb20: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
bb30: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
bb40: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
bb50: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
bb60: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
bb70: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
bb80: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
bb90: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
bba0: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
bbb0: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
bbc0: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
bbd0: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
bbe0: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
bbf0: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
bc00: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
bc10: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
bc20: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
bc30: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
bc40: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
bc50: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
bc60: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
bc70: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
bc80: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
bc90: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
bca0: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
bcb0: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
bcc0: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
bcd0: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
bce0: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
bcf0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
bd00: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
bd10: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
bd20: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
bd30: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
bd40: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
bd50: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
bd60: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
bd70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd80: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
bd90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bda0: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
bdb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bdc0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
bdd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bde0: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
bdf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be00: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
be10: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
be20: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
be30: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
be40: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
be50: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
be60: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
be70: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
be80: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
be90: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
bea0: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
beb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bec0: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
bed0: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
bee0: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
bef0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
bf00: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
bf10: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
bf20: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
bf30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
bf40: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
bf50: 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x08  /* jumps i
bf60: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
bf70: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
bf80: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
bf90: 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a  P2      0x10  /*
bfa0: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
bfb0: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
bfc0: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
bfd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
bfe0: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
bff0: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a  * NULL=NULL */..
c000: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
c010: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
c020: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
c030: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
c040: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
c050: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c060: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
c070: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
c080: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
c090: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
c0a0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
c0b0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
c0c0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
c0d0: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
c0e0: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
c0f0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
c100: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
c110: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
c120: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
c130: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
c140: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
c150: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
c160: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
c170: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
c180: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
c190: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
c1a0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c1b0: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
c1c0: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
c1d0: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
c1e0: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
c1f0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
c200: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
c210: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
c220: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
c230: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c240: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
c250: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
c260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c270: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
c280: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
c290: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
c2a0: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
c2b0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
c2c0: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
c2d0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c2e0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
c2f0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
c300: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
c310: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
c320: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
c330: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
c340: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
c350: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
c360: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
c370: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
c380: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
c390: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
c3a0: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
c3b0: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
c3c0: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
c3d0: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
c3e0: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
c3f0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
c400: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
c410: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
c420: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
c430: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
c440: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
c450: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
c460: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
c470: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
c480: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
c490: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
c4a0: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c4b0: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
c4c0: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
c4d0: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
c4e0: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
c4f0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
c500: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
c510: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
c520: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
c530: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
c540: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
c550: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
c560: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
c570: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
c580: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
c590: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
c5a0: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
c5b0: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
c5c0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
c5d0: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
c5e0: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
c5f0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
c600: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
c610: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
c620: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
c630: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
c640: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
c650: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
c660: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
c670: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
c680: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
c690: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c6a0: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
c6b0: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
c6c0: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
c6d0: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
c6e0: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
c6f0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
c700: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
c710: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
c720: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
c730: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
c740: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
c750: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c760: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
c770: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
c780: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
c790: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
c7a0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
c7b0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
c7c0: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
c7d0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
c7e0: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
c7f0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
c800: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
c810: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
c820: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
c830: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
c840: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
c850: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
c860: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
c870: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
c880: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
c890: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
c8a0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
c8b0: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
c8c0: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
c8d0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c8e0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
c8f0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
c900: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
c910: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
c920: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
c930: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
c940: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
c950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c960: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
c970: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
c980: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
c990: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
c9a0: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
c9b0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c9c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
c9d0: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
c9e0: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
c9f0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
ca00: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
ca10: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
ca20: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
ca30: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
ca40: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
ca50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
ca60: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
ca70: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ca90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
caa0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
cab0: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
cac0: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
cad0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
cae0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
caf0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
cb00: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
cb10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
cb20: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
cb30: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
cb40: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
cb50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
cb60: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
cb70: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
cb80: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
cb90: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
cba0: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
cbb0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
cbc0: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
cbd0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
cbe0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
cbf0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cc00: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
cc10: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
cc20: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
cc30: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
cc40: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
cc50: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
cc60: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
cc70: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
cc80: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
cc90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
cca0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
ccb0: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
ccc0: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
ccd0: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
cce0: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
ccf0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
cd00: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
cd10: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
cd20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
cd30: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
cd40: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
cd50: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
cd60: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
cd70: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
cd80: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
cd90: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
cda0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
cdb0: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
cdc0: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
cdd0: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
cde0: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
cdf0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
ce00: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
ce10: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
ce20: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
ce30: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
ce40: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
ce50: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
ce60: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
ce70: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
ce80: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
ce90: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
cea0: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
ceb0: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
cec0: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
ced0: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
cee0: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
cef0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
cf00: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
cf10: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
cf20: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
cf30: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
cf40: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
cf50: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
cf60: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
cf70: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
cf80: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
cf90: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
cfa0: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
cfb0: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
cfc0: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
cfd0: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
cfe0: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
cff0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
d000: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
d010: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
d020: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
d030: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
d040: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
d050: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
d060: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
d070: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
d080: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
d090: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
d0a0: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
d0b0: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
d0c0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
d0d0: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
d0e0: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
d0f0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
d100: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
d110: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
d120: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
d130: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
d140: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
d150: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
d160: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
d170: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
d180: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
d190: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
d1a0: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
d1b0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d1c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d1d0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
d1e0: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
d1f0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
d200: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
d210: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d220: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
d230: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
d240: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
d250: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
d260: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
d270: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
d280: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
d290: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
d2a0: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
d2b0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
d2c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
d2d0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
d2e0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
d2f0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d300: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
d310: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
d320: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
d330: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
d340: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
d350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
d360: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
d370: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
d380: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
d390: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f   */.#endif.  tRo
d3a0: 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20  wcnt nRowEst;   
d3b0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
d3c0: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
d3d0: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
d3e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
d3f0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
d400: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
d410: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
d420: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
d430: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
d440: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
d450: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
d460: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
d470: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
d480: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
d490: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
d4a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
d4b0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
d4c0: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d4e0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
d4f0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
d500: 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  */.  u8 tabFlags
d510: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
d520: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
d530: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
d540: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
d550: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
d560: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
d570: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
d580: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d590: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
d5a0: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
d5b0: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
d5c0: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
d5d0: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
d5e0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
d5f0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d610: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
d620: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
d630: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d640: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
d650: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
d660: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
d670: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
d680: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
d690: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
d6a0: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
d6b0: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
d6c0: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
d6d0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
d6e0: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
d6f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
d700: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
d710: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
d720: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
d730: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
d740: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
d750: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
d760: 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
d770: 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
d780: 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
d790: 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
d7a0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
d7b0: 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61   for Tabe.tabFla
d7c0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
d7d0: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
d7e0: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
d7f0: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
d800: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
d810: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
d820: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
d830: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
d840: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
d850: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
d860: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
d870: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
d880: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
d890: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
d8a0: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
d8b0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
d8c0: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
d8d0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
d8e0: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
d8f0: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
d900: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a  tual table */...
d910: 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
d920: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
d930: 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
d940: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
d950: 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
d960: 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
d970: 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
d980: 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
d990: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
d9a0: 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
d9b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
d9c0: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
d9d0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d9e0: 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
d9f0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
da00: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
da10: 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
da20: 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
da30: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
da40: 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
da50: 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
da60: 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20  N)!=0).#else.#  
da70: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
da80: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
da90: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
daa0: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
dab0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
dac0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
dad0: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
dae0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
daf0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
db00: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
db10: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
db20: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
db30: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
db40: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
db50: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
db60: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
db70: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
db80: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
db90: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
dba0: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
dbb0: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
dbc0: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
dbd0: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
dbe0: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
dbf0: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
dc00: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
dc10: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
dc20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
dc30: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
dc40: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
dc50: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
dc60: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
dc70: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
dc80: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
dc90: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
dca0: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
dcb0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
dcc0: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
dcd0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
dce0: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
dcf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
dd00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
dd10: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
dd20: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
dd30: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
dd40: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
dd50: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
dd60: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
dd70: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
dd80: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
dd90: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
dda0: 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  cked..*/.struct 
ddb0: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
ddc0: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
ddd0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
dde0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ddf0: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
de00: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
de10: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
de20: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20   foreign key in 
de30: 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
de40: 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
de50: 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
de60: 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
de70: 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
de80: 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
de90: 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
dea0: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  t foreign key on
deb0: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
dec0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
ded0: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
dee0: 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ous foreign key 
def0: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
df00: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
df10: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
df20: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
df30: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
df40: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
df50: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
df60: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
df70: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
df80: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
df90: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
dfa0: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
dfb0: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  on[2];          
dfc0: 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
dfd0: 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
dfe0: 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
dff0: 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
e000: 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a  pTrigger[2];  /*
e010: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
e020: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
e030: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
e040: 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e  Map {  /* Mappin
e050: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
e060: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
e070: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
e080: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
e090: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
e0a0: 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
e0b0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
e0c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
e0d0: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
e0e0: 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d  .  If 0 use PRIM
e0f0: 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
e100: 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f  Col[1];        /
e110: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
e120: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
e130: 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  umn s */.};../*.
e140: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
e150: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
e160: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
e170: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
e180: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
e190: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
e1a0: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
e1b0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
e1c0: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
e1d0: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
e1e0: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
e1f0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
e200: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
e210: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
e220: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
e230: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
e240: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
e250: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
e260: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
e270: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
e280: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
e290: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
e2a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
e2b0: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
e2c0: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
e2d0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
e2e0: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
e2f0: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
e300: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
e310: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
e320: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
e330: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
e340: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
e350: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
e360: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
e370: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
e380: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
e390: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
e3a0: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
e3b0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
e3c0: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
e3d0: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
e3e0: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
e3f0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
e400: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
e410: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
e420: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
e430: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
e440: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
e450: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
e460: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
e470: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
e480: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
e490: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
e4a0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
e4b0: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
e4c0: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
e4d0: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
e4e0: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
e4f0: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
e500: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
e510: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
e520: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
e530: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
e540: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
e550: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
e560: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
e570: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
e580: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
e590: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
e5a0: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
e5b0: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
e5c0: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
e5d0: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
e5e0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
e5f0: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
e600: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
e610: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
e620: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
e630: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
e640: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
e650: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
e660: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
e670: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
e680: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
e690: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
e6a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
e6b0: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
e6c0: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
e6d0: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
e6e0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
e6f0: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
e700: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
e710: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
e720: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e730: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
e740: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
e750: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
e760: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
e770: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e780: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
e790: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
e7a0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
e7b0: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
e7c0: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e7d0: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
e7e0: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
e7f0: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
e800: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
e810: 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
e820: 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
e830: 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
e840: 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
e850: 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
e860: 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
e870: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
e880: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
e890: 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
e8a0: 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
e8b0: 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
e8c0: 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
e8d0: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e8e0: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e8f0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e900: 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
e910: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e920: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e930: 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
e940: 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
e950: 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
e960: 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
e970: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
e980: 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f  fault  99  /* Do
e990: 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
e9a0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
e9b0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
e9c0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e9d0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e9e0: 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
e9f0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
ea00: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
ea10: 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
ea20: 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
ea30: 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
ea40: 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
ea50: 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
ea60: 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
ea70: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
ea80: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
ea90: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
eaa0: 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ion */.  u8 enc;
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eac0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
ead0: 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
eae0: 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
eaf0: 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
eb00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
eb10: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
eb20: 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a  Coll[] */.  u8 *
eb30: 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
eb40: 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
eb50: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20  r each column.  
eb60: 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  May be NULL */. 
eb70: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
eb80: 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
eb90: 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
eba0: 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
ebb0: 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
ebc0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
ebd0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
ebe0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
ebf0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
ec00: 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
ec10: 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
ec20: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
ec30: 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
ec40: 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
ec50: 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
ec60: 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
ec70: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
ec80: 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
ec90: 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
eca0: 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
ecb0: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
ecc0: 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
ecd0: 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
ece0: 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
ecf0: 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
ed00: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
ed10: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
ed20: 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
ed30: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
ed40: 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
ed50: 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
ed60: 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
ed70: 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
ed80: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
ed90: 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
eda0: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
edb0: 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
edc0: 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
edd0: 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
ede0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
edf0: 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
ee00: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
ee10: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
ee20: 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
ee30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
ee40: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
ee50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ee60: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
ee70: 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  m[] */.  u8 flag
ee80: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
ee90: 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73  Boolean settings
eea0: 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20  .  UNPACKED_... 
eeb0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72  below */.  i64 r
eec0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f  owid;          /
eed0: 2a 20 55 73 65 64 20 62 79 20 55 4e 50 41 43 4b  * Used by UNPACK
eee0: 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
eef0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
ef00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
ef10: 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ues */.};../*.**
ef20: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
ef30: 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of UnpackedRecor
ef40: 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  d.flags.*/.#defi
ef50: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  ne UNPACKED_INCR
ef60: 4b 45 59 20 20 20 20 20 20 20 30 78 30 31 20 20  KEY       0x01  
ef70: 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79  /* Make this key
ef80: 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67   an epsilon larg
ef90: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  er */.#define UN
efa0: 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
efb0: 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20 41 20  TCH  0x02  /* A 
efc0: 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20  prefix match is 
efd0: 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f  considered OK */
efe0: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
eff0: 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20  D_PREFIX_SEARCH 
f000: 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20  0x04  /* Ignore 
f010: 66 69 6e 61 6c 20 28 72 6f 77 69 64 29 20 66 69  final (rowid) fi
f020: 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  eld */../*.** Ea
f030: 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
f040: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f050: 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
f060: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
f070: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
f080: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
f090: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
f0a0: 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
f0b0: 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
f0c0: 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
f0d0: 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
f0e0: 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
f0f0: 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
f100: 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
f110: 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
f120: 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
f130: 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
f140: 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
f150: 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
f160: 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
f170: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
f180: 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
f190: 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
f1a0: 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
f1b0: 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
f1c0: 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
f1d0: 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
f1e0: 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
f1f0: 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
f200: 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
f210: 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
f220: 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
f230: 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
f240: 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
f250: 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
f260: 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
f270: 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
f280: 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
f290: 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
f2a0: 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
f2b0: 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
f2c0: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
f2d0: 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
f2e0: 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
f2f0: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
f300: 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
f310: 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
f320: 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
f330: 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
f340: 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
f350: 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
f360: 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
f370: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
f380: 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
f390: 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
f3a0: 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
f3b0: 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
f3c0: 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
f3d0: 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
f3e0: 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
f3f0: 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
f400: 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
f410: 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
f420: 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
f430: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
f440: 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
f450: 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
f460: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
f470: 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
f480: 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
f490: 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
f4a0: 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
f4b0: 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
f4c0: 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
f4d0: 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
f4e0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
f4f0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
f500: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
f510: 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   int *aiColumn; 
f520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
f530: 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
f540: 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
f550: 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
f560: 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
f570: 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72  Est;       /* Fr
f580: 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
f590: 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
f5a0: 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
f5b0: 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
f5c0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
f5d0: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
f5e0: 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
f5f0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
f600: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
f610: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
f620: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
f630: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
f640: 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
f650: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
f660: 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
f670: 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
f680: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
f690: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
f6a0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
f6b0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
f6c0: 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
f6d0: 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
f6e0: 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
f6f0: 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
f700: 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
f710: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  .  char **azColl
f720: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
f730: 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
f740: 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
f750: 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
f760: 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
f770: 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
f780: 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
f790: 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
f7a0: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
f7b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42             /* DB
f7c0: 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67   Page containing
f7d0: 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e   root of this in
f7e0: 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  dex */.  u16 nCo
f7f0: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
f800: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
f810: 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
f820: 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
f830: 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  ex */.  u8 onErr
f840: 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  or;             
f850: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45   /* OE_Abort, OE
f860: 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c  _Ignore, OE_Repl
f870: 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20  ace, or OE_None 
f880: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75  */.  unsigned au
f890: 74 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a  toIndex:2;    /*
f8a0: 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50   1==UNIQUE, 2==P
f8b0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43  RIMARY KEY, 0==C
f8c0: 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20  REATE INDEX */. 
f8d0: 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64   unsigned bUnord
f8e0: 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65  ered:1;   /* Use
f8f0: 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20   this index for 
f900: 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73  == or IN queries
f910: 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67   only */.  unsig
f920: 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a  ned uniqNotNull:
f930: 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55  1;  /* True if U
f940: 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
f950: 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d  LL for all colum
f960: 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ns */.#ifdef SQL
f970: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
f980: 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
f990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f9a0: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
f9b0: 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
f9c0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45  /.  tRowcnt avgE
f9d0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  q;           /* 
f9e0: 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
f9f0: 65 20 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73  e for key values
fa00: 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
fa10: 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
fa20: 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
fa30: 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
fa40: 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
fa50: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
fa60: 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
fa70: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
fa80: 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
fa90: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
faa0: 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e   memory .** usin
fab0: 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66  g a structure of
fac0: 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65   this type.  See
fad0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   documentation a
fae0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
faf0: 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f  .** analyze.c so
fb00: 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64  urce file for ad
fb10: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
fb20: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
fb30: 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20  IndexSample {.  
fb40: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
fb50: 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56   *z;        /* V
fb60: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
fb70: 20 53 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20   SQLITE_TEXT or 
fb80: 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20  SQLITE_BLOB */. 
fb90: 20 20 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20     double r;    
fba0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fbb0: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46  Type is SQLITE_F
fbc0: 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20  LOAT */.    i64 
fbd0: 69 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  i;          /* V
fbe0: 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73  alue if eType is
fbf0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20   SQLITE_INTEGER 
fc00: 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65  */.  } u;.  u8 e
fc10: 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Type;         /*
fc20: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51   SQLITE_NULL, SQ
fc30: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e  LITE_INTEGER ...
fc40: 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e   etc. */.  int n
fc50: 42 79 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Byte;        /* 
fc60: 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20  Size in byte of 
fc70: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f  text or blob. */
fc80: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20  .  tRowcnt nEq; 
fc90: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
fca0: 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
fcb0: 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
fcc0: 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
fcd0: 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20    tRowcnt nLt;  
fce0: 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
fcf0: 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
fd00: 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
fd10: 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
fd20: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b  .  tRowcnt nDLt;
fd30: 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d       /* Est. num
fd40: 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
fd50: 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
fd60: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
fd70: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
fd80: 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
fd90: 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
fda0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
fdb0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
fdc0: 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
fdd0: 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
fde0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
fdf0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
fe00: 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
fe10: 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
fe20: 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
fe30: 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
fe40: 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
fe50: 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
fe60: 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
fe70: 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
fe80: 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
fe90: 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
fea0: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
feb0: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
fec0: 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
fed0: 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
fee0: 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
fef0: 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
ff00: 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
ff10: 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
ff20: 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
ff30: 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
ff40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ff50: 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
ff60: 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
ff70: 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
ff80: 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
ff90: 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
ffa0: 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
ffb0: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
ffc0: 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
ffd0: 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
ffe0: 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
fff0: 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
10000 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
10010 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
10020 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
10030 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
10040 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
10050 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
10060 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
10070 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
10080 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
10090 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
100a0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
100b0 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
100c0 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
100d0 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
100e0 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
100f0 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
10100 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
10110 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
10120 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
10130 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
10140 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
10150 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
10160 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
10170 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
10180 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
10190 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
101a0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
101b0 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
101c0 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
101d0 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
101e0 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10200 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
10210 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
10220 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
10230 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
10240 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
10250 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
10260 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
10270 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
10280 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
102b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
102c0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
102d0 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
102e0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
102f0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10300 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
10310 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
10320 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
10330 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
10340 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
10350 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
10360 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10370 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
10380 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c  index */.  ExprL
10390 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
103a0 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
103b0 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
103c0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
103d0 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
103e0 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
103f0 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
10400 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
10410 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10420 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
10430 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
10440 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
10450 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
10460 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
10470 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
10480 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
10490 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
104a0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
104b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
104c0 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
104d0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
104e0 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
104f0 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10500 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
10510 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
10520 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
10530 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
10540 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
10550 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
10560 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
10570 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
10580 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
10590 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
105a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
105b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
105c0 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
105d0 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
105e0 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
105f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10600 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
10610 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
10620 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10640 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
10650 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
10660 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
10670 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
106a0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
106b0 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
106c0 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
106d0 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
106e0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
106f0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
10700 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
10710 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
10720 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
10730 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
10740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
10750 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10760 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
10770 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
10780 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
10790 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
107a0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
107b0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
107c0 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
107d0 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
107e0 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
107f0 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
10800 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
10810 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
10820 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
10830 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10840 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
10850 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
10860 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
10870 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
10880 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
10890 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
108a0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
108b0 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
108c0 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
108d0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
108e0 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
108f0 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
10900 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
10910 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
10920 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
10930 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
10940 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
10950 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
10960 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
10970 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
10980 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
10990 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
109a0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
109b0 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
109c0 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
109d0 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
109e0 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
109f0 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
10a00 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
10a10 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
10a20 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
10a30 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
10a40 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
10a50 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
10a60 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
10a70 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
10a80 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
10a90 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
10aa0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
10ab0 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
10ac0 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
10ad0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
10ae0 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
10af0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
10b00 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
10b10 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
10b20 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
10b30 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
10b40 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
10b50 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
10b60 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
10b70 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
10b80 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
10b90 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
10ba0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
10bb0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
10bc0 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
10bd0 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
10be0 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
10bf0 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
10c00 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
10c10 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
10c20 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
10c30 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
10c40 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
10c50 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
10c60 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
10c70 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
10c80 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
10c90 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
10ca0 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
10cb0 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
10cc0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
10cd0 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
10ce0 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
10cf0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
10d00 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
10d10 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
10d20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10d30 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
10d40 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
10d50 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
10d60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10d70 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
10d80 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
10d90 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10da0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
10db0 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
10dc0 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
10dd0 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
10de0 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
10df0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
10e00 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
10e10 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
10e20 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
10e30 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
10e40 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
10e50 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
10e60 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
10e70 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10e80 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
10e90 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
10ea0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
10eb0 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
10ec0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
10ed0 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
10ee0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
10ef0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
10f00 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
10f10 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
10f20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
10f30 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
10f40 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
10f50 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
10f60 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
10f70 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
10f80 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
10f90 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
10fa0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
10fb0 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
10fc0 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
10fd0 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
10fe0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
10ff0 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
11000 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
11010 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
11020 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
11030 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
11040 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
11050 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
11060 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
11070 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
11080 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
11090 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
110a0 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
110b0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
110c0 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
110d0 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
110e0 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
110f0 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
11100 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
11110 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
11120 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
11130 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
11140 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
11150 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
11160 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
11170 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
11180 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
11190 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
111a0 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
111b0 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
111c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
111d0 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
111e0 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
111f0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
11200 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
11210 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
11220 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
11230 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
11240 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
11250 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
11260 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
11270 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
11280 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
11290 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
112a0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
112b0 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
112c0 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
112d0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
112e0 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
112f0 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
11300 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
11310 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
11320 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
11330 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
11340 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
11350 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
11360 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
11370 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
11380 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
11390 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
113a0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
113b0 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
113c0 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
113d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
113e0 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
113f0 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
11400 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
11410 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
11420 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
11430 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
11440 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
11450 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
11460 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
11470 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
11480 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
11490 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
114a0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
114b0 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
114c0 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
114d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
114e0 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
114f0 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
11500 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
11510 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
11520 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
11530 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
11540 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
11550 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
11560 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
11570 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
11580 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
11590 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
115a0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
115b0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
115c0 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
115d0 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
115e0 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
115f0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
11600 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
11610 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
11620 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
11630 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
11640 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
11650 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
11660 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
11670 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
11680 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
11690 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
116a0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
116b0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
116c0 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
116d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
116e0 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
116f0 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
11700 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
11710 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
11720 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
11730 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
11740 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
11750 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
11760 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
11770 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
11780 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
11790 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
117a0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
117b0 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
117c0 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
117d0 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
117e0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
117f0 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
11800 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
11810 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66  olumn */.  u16 f
11820 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
11830 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
11840 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
11850 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
11860 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
11870 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
11880 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
11890 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
118a0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
118b0 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
118c0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
118d0 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
118e0 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
118f0 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
11900 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
11910 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
11920 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
11930 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
11940 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
11950 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
11960 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
11970 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
11980 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
11990 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
119a0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
119b0 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
119c0 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
119d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
119e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
119f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
11a10 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
11a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
11a30 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
11a40 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
11a50 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
11a60 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
11a70 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
11a80 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
11a90 46 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  Function argumen
11aa0 74 73 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e  ts or in "<expr>
11ab0 20 49 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29   IN (<expr-list)
11ac0 22 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  " */.    Select 
11ad0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
11ae0 20 55 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65   Used for sub-se
11af0 6c 65 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72  lects and "<expr
11b00 3e 20 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22  > IN (<select>)"
11b10 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
11b20 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
11b30 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
11b40 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
11b50 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
11b60 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
11b70 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
11b80 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
11b90 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
11ba0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
11bb0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
11bc0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
11bd0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
11be0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
11bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c20 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
11c30 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
11c40 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
11c50 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
11c60 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
11c70 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
11c80 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
11c90 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
11ca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11cb0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
11cc0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
11cd0 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
11ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cf0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11d00 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
11d10 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
11d40 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
11d50 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20   old */.  ynVar 
11d60 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
11d70 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
11d80 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
11d90 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
11dc0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
11dd0 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
11de0 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
11df0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
11e00 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
11e10 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
11e20 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
11e30 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
11e40 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
11e50 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
11e60 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
11e70 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
11e80 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20  u8 flags2;      
11e90 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
11ea0 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20   set of flags.  
11eb0 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20  EP2_... */.  u8 
11ec0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
11ed0 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
11ee0 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
11ef0 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
11f20 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
11f30 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
11f40 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
11f50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11f60 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
11f70 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
11f80 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
11f90 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
11fa0 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
11fb0 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
11fc0 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
11fd0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
11fe0 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
11ff0 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
12000 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
12010 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12020 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
12030 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
12040 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
12050 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
12060 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30  P_FromJoin   0x0
12070 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74  001  /* Originat
12080 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
12090 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
120a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
120b0 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30 30  _Agg        0x00
120c0 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  02  /* Contains 
120d0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
120e0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
120f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
12100 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34 20  solved   0x0004 
12110 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
12120 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
12130 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
12140 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30   EP_Error      0
12150 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73  x0008  /* Expres
12160 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
12170 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
12180 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
12190 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 31 30  istinct   0x0010
121a0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
121b0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
121c0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
121d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
121e0 65 6c 65 63 74 20 20 30 78 30 30 32 30 20 20 2f  elect  0x0020  /
121f0 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
12200 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
12210 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
12220 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30   EP_DblQuoted  0
12230 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e  x0040  /* token.
12240 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
12250 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
12260 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
12270 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72  c  0x0080  /* Tr
12280 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
12290 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
122a0 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
122b0 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
122c0 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72     0x0100  /* Tr
122d0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
122e0 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f  _COLLATE opearto
122f0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
12300 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30  FixedDest  0x020
12310 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65  0  /* Result nee
12320 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69  ded in a specifi
12330 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64  c register */.#d
12340 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
12350 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49  e   0x0400  /* I
12360 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
12370 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
12380 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
12390 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38  _xIsSelect  0x08
123a0 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  00  /* x.pSelect
123b0 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
123c0 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
123d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48   */.#define EP_H
123e0 69 6e 74 20 20 20 20 20 20 20 30 78 31 30 30 30  int       0x1000
123f0 20 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f    /* Not used */
12400 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75  .#define EP_Redu
12410 63 65 64 20 20 20 20 30 78 32 30 30 30 20 20 2f  ced    0x2000  /
12420 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73  * Expr struct is
12430 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
12440 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
12450 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
12460 4f 6e 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a  Only  0x4000  /*
12470 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20   Expr struct is 
12480 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
12490 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
124a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
124b0 69 63 20 20 20 20 20 30 78 38 30 30 30 20 20 2f  ic     0x8000  /
124c0 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
124d0 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
124e0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a  om malloc() */..
124f0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
12500 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
12510 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
12520 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20  the Expr.flags2 
12530 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
12540 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f  e EP2_MallocedTo
12550 6b 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ken  0x0001  /* 
12560 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
12570 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
12580 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
12590 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20  P2_Irreducible  
125a0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e    0x0002  /* Can
125b0 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55  not EXPRDUP_REDU
125c0 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a  CE this Expr */.
125d0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64  ./*.** The pseud
125e0 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65  o-routine sqlite
125f0 33 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69  3ExprSetIrreduci
12600 62 6c 65 20 73 65 74 73 20 74 68 65 20 45 50 32  ble sets the EP2
12610 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20  _Irreducible.** 
12620 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65  flag on an expre
12630 73 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e  ssion structure.
12640 20 20 54 68 69 73 20 66 6c 61 67 20 69 73 20 75    This flag is u
12650 73 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c  sed for VV&A onl
12660 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69  y.  The.** routi
12670 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  ne is implemente
12680 64 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61  d as a macro tha
12690 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65  t only works whe
126a0 6e 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d  n in debugging m
126b0 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f  ode,.** so as no
126c0 74 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64  t to burden prod
126d0 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a  uction code..*/.
126e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
126f0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
12700 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28  rSetIrreducible(
12710 58 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20  X)  (X)->flags2 
12720 7c 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69 62  |= EP2_Irreducib
12730 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  le.#else.# defin
12740 65 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63  e ExprSetIrreduc
12750 69 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ible(X).#endif..
12760 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
12770 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
12780 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
12790 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
127a0 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
127b0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
127c0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
127d0 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
127e0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  )->flags&(P))==(
127f0 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  P)).#define Expr
12800 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45  HasAnyProperty(E
12810 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67  ,P)  (((E)->flag
12820 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
12830 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
12840 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
12850 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
12860 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
12870 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
12880 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
12890 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
128a0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
128b0 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
128c0 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
128d0 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
128e0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
128f0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
12900 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
12910 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
12920 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
12930 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
12940 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
12950 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
12960 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
12970 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
12980 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
12990 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
129a0 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
129b0 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
129c0 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
129d0 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
129e0 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
129f0 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
12a00 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
12a10 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
12a20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
12a30 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
12a40 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
12a50 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
12a60 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
12a70 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
12a80 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
12a90 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
12aa0 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
12ab0 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
12ac0 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
12ad0 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
12ae0 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
12af0 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
12b00 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
12b10 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
12b20 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
12b30 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
12b40 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
12b50 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
12b60 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
12b70 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
12b80 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
12b90 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
12ba0 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
12bb0 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
12bc0 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
12bd0 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
12be0 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
12bf0 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
12c00 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
12c10 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
12c20 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
12c30 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
12c40 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
12c50 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
12c60 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
12c70 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
12c80 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
12c90 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
12ca0 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
12cb0 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
12cc0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
12cd0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
12ce0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
12cf0 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
12d00 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
12d10 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
12d20 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
12d30 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
12d40 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
12d50 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
12d60 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
12d70 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
12d80 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
12d90 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
12da0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
12db0 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
12dc0 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
12dd0 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
12de0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
12df0 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
12e00 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
12e10 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
12e20 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
12e30 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
12e40 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
12e50 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
12e60 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
12e70 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
12e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12e90 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
12ea0 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
12eb0 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72  /.  int iECursor
12ec0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44  ;          /* VD
12ed0 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69  BE Cursor associ
12ee0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45  ated with this E
12ef0 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72  xprList */.  str
12f00 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
12f10 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
12f20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
12f30 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
12f40 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12f50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
12f60 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12f70 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
12f80 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
12f90 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
12fa0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
12fb0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12fc0 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
12fd0 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
12fe0 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
12ff0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
13000 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
13010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
13020 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
13030 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
13040 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
13050 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
13060 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
13070 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
13080 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
13090 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
130a0 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
130b0 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
130c0 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69  UMN */.    u16 i
130d0 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
130e0 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20     /* For ORDER 
130f0 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  BY, column numbe
13100 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20  r in result set 
13110 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61  */.    u16 iAlia
13120 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
13130 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
13140 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
13150 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
13180 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
13190 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
131a0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
131b0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
131c0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
131d0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
131e0 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
131f0 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
13200 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
13210 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
13220 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
13230 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
13240 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
13250 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
13260 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
13270 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
13280 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
13290 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
132a0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
132b0 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
132c0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
132d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
132e0 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
132f0 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
13300 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
13310 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
13320 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
13330 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13340 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
13350 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
13360 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
13370 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
13380 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
13390 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
133a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
133b0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
133c0 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
133d0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
133e0 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
133f0 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
13400 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
13410 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
13420 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
13430 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
13440 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
13450 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
13460 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
13470 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
13480 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
13490 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
134a0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
134b0 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
134c0 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
134d0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
134e0 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
134f0 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
13500 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
13510 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
13520 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
13530 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
13540 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
13550 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
13560 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13570 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
13580 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
13590 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
135a0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
135b0 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
135c0 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
135d0 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
135e0 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
135f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13600 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
13610 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
13620 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
13630 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
13640 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
13650 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
13660 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
13670 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
13680 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
13690 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
136a0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
136b0 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
136c0 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
136d0 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
136e0 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
136f0 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
13700 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
13710 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
13720 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
13730 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
13740 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
13750 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
13760 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
13770 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
13780 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
13790 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
137a0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
137b0 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
137c0 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
137d0 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
137e0 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
137f0 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
13800 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13810 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
13820 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
13830 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
13840 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
13850 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
13860 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
13870 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
13880 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
13890 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
138a0 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
138b0 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
138c0 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
138d0 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
138e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
138f0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
13900 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
13910 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
13920 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
13930 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
13940 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
13950 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
13960 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
13970 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
13980 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
13990 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
139a0 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
139b0 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
139c0 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
139d0 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
139e0 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
139f0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
13a00 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
13a10 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
13a20 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
13a30 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
13a40 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
13a50 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
13a60 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
13a70 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
13a80 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
13a90 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
13aa0 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
13ab0 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
13ac0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
13ad0 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
13ae0 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
13af0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
13b00 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
13b10 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
13b20 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
13b30 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
13b40 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
13b50 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
13b60 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
13b70 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
13b80 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
13b90 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
13ba0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
13bb0 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
13bc0 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
13bd0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
13be0 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
13bf0 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b 20 20 20   {.  u8 nSrc;   
13c00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13c10 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
13c20 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
13c30 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
13c40 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  8 nAlloc;      /
13c50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
13c60 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
13c70 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
13c80 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
13c90 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
13ca0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
13cb0 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
13cc0 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
13cd0 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
13ce0 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
13cf0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
13d00 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
13d10 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
13d20 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
13d30 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13d40 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
13d50 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
13d60 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
13d70 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
13d80 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
13d90 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
13da0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
13db0 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
13dc0 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
13dd0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
13de0 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
13df0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
13e00 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
13e10 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
13e20 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
13e30 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
13e40 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
13e50 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
13e60 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
13e70 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
13e80 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
13e90 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
13ea0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
13eb0 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  b */.    u8 join
13ec0 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
13ed0 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
13ee0 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
13ef0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
13f00 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
13f10 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
13f20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
13f30 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
13f40 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
13f50 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
13f60 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
13f70 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
13f80 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
13f90 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
13fa0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
13fb0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
13fc0 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
13fd0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13fe0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
13ff0 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
14000 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
14010 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
14020 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
14030 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
14040 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
14050 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
14060 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
14070 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
14080 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
14090 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
140a0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
140b0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
140c0 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
140d0 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
140e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
140f0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
14100 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
14110 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
14120 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
14130 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
14140 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
14150 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
14160 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
14170 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
14180 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
14190 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
141a0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
141b0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
141c0 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
141d0 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
141e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
141f0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
14200 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
14210 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
14220 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
14230 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
14240 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
14250 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
14260 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
14270 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
14280 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
14290 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
142a0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
142b0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
142c0 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
142d0 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
142e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
142f0 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
14300 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
14310 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
14320 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
14330 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
14340 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
14350 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
14360 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
14370 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
14380 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
14390 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
143a0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
143b0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
143c0 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
143d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
143e0 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
143f0 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
14400 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
14410 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
14420 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
14430 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
14440 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
14450 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
14460 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
14470 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
14480 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
14490 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
144a0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
144b0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
144c0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
144d0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
144e0 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
144f0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
14500 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
14510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14520 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
14530 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
14540 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
14550 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
14560 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14570 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
14580 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
14590 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
145a0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
145b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
145c0 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
145d0 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
145e0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
145f0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
14600 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
14610 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
14620 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
14630 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
14640 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
14650 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
14660 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
14670 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
14680 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
14690 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
146a0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
146b0 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
146c0 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
146d0 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
146e0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
146f0 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20  ERE_AND_ONLY    
14700 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
14710 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73  on't use indices
14720 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f   for OR terms */
14730 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47  .#define WHERE_G
14740 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20  ROUPBY          
14750 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0100 /* pOrder
14760 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47  By is really a G
14770 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
14780 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
14790 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30  TBY       0x0200
147a0 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20   /* pOrderby is 
147b0 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43  really a DISTINC
147c0 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  T clause */.#def
147d0 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44  ine WHERE_WANT_D
147e0 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30  ISTINCT    0x040
147f0 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20  0 /* All output 
14800 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74  needs to be dist
14810 69 6e 63 74 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  inct */../* Allo
14820 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
14830 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
14840 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
14850 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14860 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
14870 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
14880 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
14890 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
148a0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
148b0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
148c0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
148d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
148e0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
148f0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
14900 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
14910 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
14920 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
14930 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
14940 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
14950 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
14960 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
14970 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
14980 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
14990 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
149a0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
149b0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
149c0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
149d0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
149e0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
149f0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
14a00 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
14a10 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
14a20 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
14a30 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
14a40 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
14a50 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
14a60 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
14a70 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
14a80 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
14a90 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
14aa0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
14ab0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
14ac0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
14ad0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
14ae0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
14af0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
14b00 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
14b10 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
14b20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
14b30 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
14b40 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
14b50 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
14b60 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
14b70 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
14b80 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
14b90 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
14ba0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
14bb0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
14bc0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
14bd0 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
14be0 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
14bf0 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
14c00 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
14c10 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
14c20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
14c30 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
14c40 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
14c50 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
14c60 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
14c70 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
14c80 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
14c90 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
14ca0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
14cb0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
14cc0 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
14cd0 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
14ce0 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
14cf0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
14d00 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
14d10 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
14d20 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
14d30 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
14d40 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
14d50 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
14d60 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
14d70 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
14d80 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
14d90 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
14da0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
14db0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
14dc0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
14dd0 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
14de0 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
14df0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
14e00 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
14e10 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
14e20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
14e30 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
14e40 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
14e50 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  nal list of name
14e60 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  d expressions */
14e70 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
14e80 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
14e90 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
14ea0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
14eb0 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
14ec0 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
14ed0 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
14ee0 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
14ef0 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
14f00 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
14f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14f20 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
14f30 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
14f40 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
14f50 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
14f60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
14f70 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
14f80 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
14f90 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
14fa0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
14fb0 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
14fc0 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
14fd0 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
14fe0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
14ff0 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
15000 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
15010 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15020 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
15030 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
15040 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15050 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
15060 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
15070 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
15080 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15090 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
150a0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
150b0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
150c0 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
150d0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
150e0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
150f0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15100 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
15110 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
15120 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
15130 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
15140 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
15150 6e 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20 20  ne NC_AsMaybe   
15160 30 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c  0x10    /* Resol
15170 76 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20 6f  ve to AS terms o
15180 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
15190 20 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20 20   only.          
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65     ** if no othe
151c0 72 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20  r resolution is 
151d0 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 23 64 65  available */.#de
151e0 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20  fine NC_PartIdx 
151f0 20 20 30 78 32 30 20 20 20 20 2f 2a 20 54 72 75    0x20    /* Tru
15200 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61  e if resolving a
15210 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57   partial index W
15220 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  HERE */../*.** A
15230 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15240 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15250 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
15260 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
15270 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
15280 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
15290 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
152a0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
152b0 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
152c0 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
152d0 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
152e0 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
152f0 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
15300 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
15310 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
15320 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
15330 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
15340 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
15350 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
15360 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
15370 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
15380 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
15390 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
153a0 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
153b0 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
153c0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
153d0 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
153e0 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
153f0 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
15400 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
15410 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
15420 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
15430 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
15440 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
15450 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
15460 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
15470 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
15480 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
15490 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
154a0 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
154b0 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
154c0 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
154d0 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
154e0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
154f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
15500 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
15510 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
15520 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
15530 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
15540 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
15550 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
15560 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
15570 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
15580 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
15590 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
155a0 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
155b0 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
155c0 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
155d0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
155e0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
155f0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
15600 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
15610 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
15620 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
15630 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
15640 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
15650 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
15660 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
15670 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
15680 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
15690 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
156a0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
156b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
156c0 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
156d0 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
156e0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
156f0 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b  .  u16 selFlags;
15700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
15710 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
15720 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
15730 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
15740 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
15750 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
15760 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
15770 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
15780 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20  enEphm[3];   /* 
15790 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
157a0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
157b0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
157c0 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b   u64 nSelectRow;
157d0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
157e0 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
157f0 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20  esult rows */.  
15800 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
15810 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
15820 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
15830 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
15840 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
15850 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
15860 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
15870 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
15880 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
15890 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
158a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
158b0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
158c0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
158d0 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
158e0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
158f0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
15900 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
15910 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
15920 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
15930 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
15940 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
15950 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
15960 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
15970 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
15980 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 52   */.  Select *pR
15990 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20  ightmost;    /* 
159a0 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63  Right-most selec
159b0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
159c0 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
159d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
159e0 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
159f0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
15a00 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
15a10 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
15a20 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
15a30 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
15a40 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
15a50 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
15a60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
15a70 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
15a80 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
15a90 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
15aa0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
15ab0 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
15ac0 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
15ad0 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
15ae0 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
15af0 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
15b00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
15b10 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
15b20 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66  0002  /* Identif
15b30 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
15b40 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
15b50 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
15b60 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
15b70 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
15b80 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
15b90 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
15ba0 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
15bb0 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  08  /* Uses the 
15bc0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
15bd0 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
15be0 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
15bf0 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71     0x0010  /* sq
15c00 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
15c10 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
15c20 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
15c30 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
15c40 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d   0x0020  /* FROM
15c50 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
15c60 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
15c70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
15c80 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78  eSorter       0x
15c90 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75 73  0040  /* Sort us
15ca0 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a  ing a sorter */.
15cb0 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
15cc0 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30 38  s          0x008
15cd0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
15ce0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
15cf0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
15d00 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20 20  SF_Materialize  
15d10 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46 6f     0x0100  /* Fo
15d20 72 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61 74  rce materializat
15d30 69 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f 0a  ion of views */.
15d40 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
15d50 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30  dFrom      0x020
15d60 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
15d70 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
15d80 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 0a 2f  OM clause */.../
15d90 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
15da0 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61 6e   of a select can
15db0 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
15dc0 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2e  in several ways.
15dd0 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20 70    The.** "SRT" p
15de0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
15df0 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65 22  ECT Result Type"
15e00 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
15e10 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
15e20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
15e30 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
15e40 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
15e50 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
15e60 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
15e70 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
15e80 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
15e90 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
15ea0 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
15eb0 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
15ec0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
15ed0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
15ee0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
15ef0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
15f00 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
15f10 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
15f20 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
15f30 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
15f40 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
15f50 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
15f60 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
15f70 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63 61  Dest)<=SRT_Disca
15f80 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  rd)..#define SRT
15f90 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35 20  _Output       5 
15fa0 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
15fb0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
15fc0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
15fd0 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20            6  /* 
15fe0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
15ff0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
16000 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
16010 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20            7  /* 
16020 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
16030 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
16040 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
16050 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38 20  _Table        8 
16060 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16070 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
16080 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
16090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
160a0 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20 20  EphemTab     9  
160b0 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
160c0 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
160d0 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
160e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
160f0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20 20  Coroutine   10  
16100 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
16110 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
16120 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  lt */../*.** An 
16130 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
16140 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
16150 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
16160 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
16170 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
16180 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
16190 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
161a0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
161b0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
161c0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
161d0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
161e0 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
161f0 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20  ar affSdst;     
16200 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
16210 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
16220 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
16230 44 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20 41  DParm;      /* A
16240 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
16250 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
16260 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
16270 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
16280 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
16290 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
162a0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
162b0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
162c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
162d0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
162e0 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ocated */.};../*
162f0 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
16300 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
16310 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
16320 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
16330 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
16340 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
16350 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
16360 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
16370 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
16380 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
16390 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
163a0 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
163b0 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
163c0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
163d0 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
163e0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
163f0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
16400 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
16410 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
16420 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
16430 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
16440 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
16450 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
16460 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
16470 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
16480 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
16490 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
164a0 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
164b0 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
164c0 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
164d0 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
164e0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
164f0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
16500 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
16510 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
16520 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
16530 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
16540 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
16550 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
16560 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
16570 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
16580 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
16590 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
165a0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
165b0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
165c0 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
165d0 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
165e0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
165f0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
16600 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
16610 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
16620 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
16630 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
16640 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
16650 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
16660 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
16670 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
16680 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
16690 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
166a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
166b0 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
166c0 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
166d0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
166e0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
166f0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
16700 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
16710 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
16720 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
16730 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
16740 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
16750 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
16760 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
16770 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
16780 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
16790 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
167a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
167b0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
167c0 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
167d0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
167e0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
167f0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
16800 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
16810 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
16820 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
16830 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
16840 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
16850 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
16860 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
16870 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
16880 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
16890 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
168a0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
168b0 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
168c0 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
168d0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
168e0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
168f0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
16900 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
16910 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
16920 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
16930 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
16940 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
16950 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
16960 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
16970 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
16980 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
16990 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
169a0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
169b0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
169c0 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
169d0 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
169e0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
169f0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
16a00 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
16a10 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
16a20 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
16a30 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
16a40 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
16a50 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
16a60 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
16a70 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
16a80 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
16a90 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
16aa0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
16ab0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
16ac0 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
16ad0 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16af0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
16b00 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
16b10 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
16b20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
16b30 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
16b40 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
16b50 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
16b60 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
16b70 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
16b80 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
16b90 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
16ba0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
16bb0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
16bc0 79 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f 75  ypedef sqlite3_u
16bd0 69 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23  int64 yDbMask;.#
16be0 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
16bf0 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
16c00 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
16c10 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
16c20 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
16c30 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
16c40 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
16c50 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
16c60 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
16c70 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
16c80 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
16c90 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
16ca0 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
16cb0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
16cc0 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
16cd0 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
16ce0 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
16cf0 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
16d00 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
16d10 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
16d20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
16d30 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
16d40 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
16d50 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
16d60 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
16d70 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
16d80 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
16d90 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
16da0 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
16db0 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
16dc0 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
16dd0 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
16de0 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
16df0 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
16e00 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
16e10 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
16e20 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
16e30 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
16e40 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
16e50 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
16e60 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
16e70 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
16e80 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
16e90 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
16ea0 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
16eb0 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
16ec0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
16ed0 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
16ee0 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
16ef0 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
16f00 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
16f10 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
16f20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
16f30 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
16f40 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
16f50 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
16f60 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
16f70 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
16f80 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
16f90 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
16fa0 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
16fb0 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
16fc0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
16fd0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
16fe0 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
16ff0 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
17000 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
17010 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
17020 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
17030 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
17040 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
17050 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
17060 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
17070 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
17080 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
17090 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
170a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
170b0 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
170c0 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
170d0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
170e0 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
170f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
17100 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17110 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
17120 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e 55  */.  u8 nTempInU
17130 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  se;       /* Num
17140 62 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67 5b  ber of aTempReg[
17150 5d 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  ] currently chec
17160 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38 20  ked out */.  u8 
17170 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  nColCache;      
17180 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17190 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61  ntries in aColCa
171a0 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 43  che[] */.  u8 iC
171b0 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
171c0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
171d0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f 20   aColCache[] to 
171e0 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38 20  replace */.  u8 
171f0 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
17200 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
17210 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
17220 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
17230 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
17240 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
17250 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
17260 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
17270 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
17280 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  on */.  int aTem
17290 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
172a0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
172b0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
172c0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
172d0 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
172e0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
172f0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17300 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
17310 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
17320 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
17330 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
17340 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
17350 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
17360 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17370 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
17380 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
17390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
173a0 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
173b0 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
173c0 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
173d0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
173e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
173f0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
17400 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
17410 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
17420 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17430 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
17440 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
17450 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
17460 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
17470 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
17480 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63  o far */.  int c
17490 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
174a0 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
174b0 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
174c0 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
174d0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  s */.  int iCach
174e0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
174f0 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
17500 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
17510 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
17520 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
17530 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
17540 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
17550 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
17560 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
17570 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
17580 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
17590 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
175a0 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
175b0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
175c0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
175d0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
175e0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
175f0 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
17600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
17610 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
17620 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
17630 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
17640 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
17650 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
17660 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
17670 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
17680 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
17690 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
176a0 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
176b0 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
176c0 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
176d0 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
176e0 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
176f0 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
17700 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
17710 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
17720 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
17730 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
17740 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
17750 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
17760 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
17770 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
17780 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
17790 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
177a0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
177b0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
177c0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
177d0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
177e0 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f    int cookieGoto
177f0 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73  ;      /* Addres
17800 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20  s of OP_Goto to 
17810 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72 20  cookie verifier 
17820 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  subroutine */.  
17830 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b  int cookieValue[
17840 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
17850 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75  HED+2];  /* Valu
17860 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f  es of cookies to
17870 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74   verify */.  int
17880 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
17890 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
178a0 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
178b0 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
178c0 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
178d0 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
178e0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
178f0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
17900 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
17910 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
17920 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
17930 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
17940 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
17950 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
17960 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
17970 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
17980 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
17990 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
179a0 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  g parsed */.#ifn
179b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
179c0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
179d0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
179e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
179f0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
17a00 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
17a10 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
17a20 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
17a30 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
17a40 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
17a50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
17a60 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
17a70 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
17a80 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
17a90 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
17aa0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
17ab0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
17ac0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
17ad0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
17ae0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
17af0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
17b00 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
17b10 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
17b20 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
17b30 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
17b40 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
17b50 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
17b60 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
17b70 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
17b80 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
17b90 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
17ba0 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
17bb0 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
17bc0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
17bd0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
17be0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
17bf0 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
17c00 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
17c10 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
17c20 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
17c30 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
17c40 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
17c50 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
17c60 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
17c70 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
17c80 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
17c90 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
17ca0 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
17cb0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
17cc0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
17cd0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
17ce0 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
17cf0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
17d00 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
17d10 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
17d20 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
17d30 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
17d40 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a  h recursion */..
17d50 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
17d60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17d70 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
17d80 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
17d90 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
17da0 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17dc0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
17dd0 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
17de0 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70  ar[] */.  u8 exp
17df0 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
17e00 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
17e10 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
17e20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
17e30 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
17e40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17e50 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
17e60 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
17e70 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
17e80 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
17e90 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
17ea0 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
17eb0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
17ec0 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
17ed0 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
17ee0 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
17ef0 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
17f00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17f10 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
17f20 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
17f30 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
17f40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17f50 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
17f60 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
17f70 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
17f80 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
17f90 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
17fa0 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
17fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
17fc0 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
17fd0 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
17fe0 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
17ff0 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
18000 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
18010 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
18020 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
18030 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
18040 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
18050 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
18060 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
18070 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
18080 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
18090 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
180a0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
180b0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
180c0 61 72 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20  are()) */.  int 
180d0 2a 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20  *aAlias;        
180e0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
180f0 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  r used to hold a
18100 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f  liased result */
18110 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
18120 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
18130 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
18140 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
18150 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
18160 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
18170 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
18180 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
18190 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
181a0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
181b0 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
181c0 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
181d0 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
181e0 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
181f0 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
18200 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
18210 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
18220 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
18230 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
18240 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
18250 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  eToken;         
18260 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
18270 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
18280 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
18290 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
182a0 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
182b0 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
182c0 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
182d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
182e0 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
182f0 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
18300 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
18310 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
18320 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
18330 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
18340 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
18350 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
18360 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
18370 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
18380 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
18390 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
183a0 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
183b0 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
183c0 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
183d0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
183e0 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
183f0 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
18400 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
18410 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  /.};../*.** Retu
18420 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
18430 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
18440 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
18450 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
18460 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
18470 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
18480 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
18490 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
184a0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
184b0 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
184c0 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
184d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
184e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
184f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
18500 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
18510 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
18520 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
18530 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
18540 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
18550 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
18560 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
18570 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
18580 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
18590 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
185a0 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
185b0 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
185c0 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
185d0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
185e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
185f0 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
18600 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
18610 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
18620 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
18630 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
18640 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  es..*/.#define O
18650 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
18660 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
18670 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
18680 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
18690 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
186a0 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
186b0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
186c0 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
186d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
186e0 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
186f0 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
18700 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
18710 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
18720 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
18730 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
18740 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
18750 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
18760 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
18770 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
18780 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
18790 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
187a0 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
187b0 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
187c0 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
187d0 45 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  E    0x20    /* 
187e0 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62  Clear pseudo-tab
187f0 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43  le cache in OP_C
18800 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
18810 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
18820 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
18830 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
18840 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
18850 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
18860 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
18870 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
18880 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
18890 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
188a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
188b0 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
188c0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
188d0 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
188e0 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
188f0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32  define OPFLAG_P2
18900 49 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32  ISREG       0x02
18910 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f      /* P2 to OP_
18920 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69  Open** is a regi
18930 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23  ster number */.#
18940 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45  define OPFLAG_PE
18950 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31  RMUTE       0x01
18960 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72      /* OP_Compar
18970 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75  e: use the permu
18980 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a  tation */../*. *
18990 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
189a0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
189b0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
189c0 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
189d0 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
189e0 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a  ct Trigger. . *.
189f0 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
18a00 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
18a10 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
18a20 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
18a30 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
18a40 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
18a50 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
18a60 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
18a70 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
18a80 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29  . *    database)
18a90 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72  . This allows Tr
18aa0 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73  igger structures
18ab0 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64   to be retrieved
18ac0 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20   by name.. * 2. 
18ad0 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73  All triggers ass
18ae0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73  ociated with a s
18af0 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d  ingle table form
18b00 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20   a linked list, 
18b10 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20  using the. *    
18b20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20  pNext member of 
18b30 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
18b40 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
18b50 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
18b60 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b  f the. *    link
18b70 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65  ed list is store
18b80 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67  d as the "pTrigg
18b90 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  er" member of th
18ba0 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20  e associated. * 
18bb0 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e     struct Table.
18bc0 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70  . *. * The "step
18bd0 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f  _list" member po
18be0 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
18bf0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c  t element of a l
18c00 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f  inked list. * co
18c10 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
18c20 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
18c30 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69  ified as the tri
18c40 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger program.. *
18c50 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
18c60 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
18c70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18c80 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
18c90 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20  trigger         
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18cb0 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b  /.  char *table;
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18cd0 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
18ce0 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
18cf0 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f  igger applies */
18d00 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
18d10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
18d20 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
18d30 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
18d40 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a  SERT         */.
18d50 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20    u8 tr_tm;     
18d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
18d70 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f   of TRIGGER_BEFO
18d80 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45  RE, TRIGGER_AFTE
18d90 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  R */.  Expr *pWh
18da0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  en;            /
18db0 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73  * The WHEN claus
18dc0 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
18dd0 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c  ion (may be NULL
18de0 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  ) */.  IdList *p
18df0 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f  Columns;       /
18e00 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  * If this is an 
18e10 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
18e20 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c  n-list> trigger,
18e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18e50 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  e <column-list> 
18e60 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  is stored here *
18e70 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
18e80 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  ema;        /* S
18e90 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
18ea0 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a   the trigger */.
18eb0 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63    Schema *pTabSc
18ec0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
18ed0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
18ee0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72  he table */.  Tr
18ef0 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f  iggerStep *step_
18f00 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69  list; /* Link li
18f10 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72  st of trigger pr
18f20 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20  ogram steps     
18f30 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69          */.  Tri
18f40 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20  gger *pNext;    
18f50 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69       /* Next tri
18f60 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  gger associated 
18f70 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a  with the table *
18f80 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72  /.};../*.** A tr
18f90 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20  igger is either 
18fa0 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41  a BEFORE or an A
18fb0 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54  FTER trigger.  T
18fc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
18fd0 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d  stants.** determ
18fe0 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a  ine which. .**.*
18ff0 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
19000 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
19010 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
19020 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
19030 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
19040 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
19050 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
19060 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
19070 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
19080 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
19090 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
190a0 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
190b0 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
190c0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
190d0 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
190e0 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
190f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
19100 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
19110 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
19120 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e  ogram. . *. * In
19130 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
19140 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
19150 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
19160 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
19170 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
19180 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
19190 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
191a0 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
191b0 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
191c0 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  e . * associated
191d0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
191e0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
191f0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
19200 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
19210 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
19220 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
19230 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a  er-program.. * .
19240 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
19250 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
19260 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
19270 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
19280 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
19290 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
192a0 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
192b0 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
192c0 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
192d0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a  mined by the . *
192e0 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
192f0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
19300 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
19310 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
19320 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
19330 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
19340 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
19350 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
19360 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
19370 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
19380 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
193a0 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
193b0 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
193c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
193d0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74  rwise NULL.. * t
193e0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
193f0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
19400 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
19410 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
19420 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
19430 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
19440 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
19450 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
19460 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
19470 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
19480 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
19490 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
194a0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
194b0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
194c0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
194d0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
194e0 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
194f0 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a  s>) VALUES ... .
19500 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19510 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
19520 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20  this stores the 
19530 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20  column-names to 
19540 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  be. *           
19550 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f     inserted into
19560 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
19570 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72  K_DELETE). * tar
19580 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
19590 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
195a0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
195b0 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
195c0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
195d0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
195e0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
195f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
19600 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
19610 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
19620 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
19630 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20  ULL.. * . * (op 
19640 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
19650 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
19660 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
19670 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
19680 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
19690 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a  date rows of.. *
196a0 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
196b0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
196c0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
196d0 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
196e0 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
196f0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
19700 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
19710 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
19720 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
19730 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
19740 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
19750 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
19760 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
19770 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
19780 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
19790 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
197a0 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
197b0 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20     argument.. * 
197c0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
197d0 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
197e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
197f0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
19800 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
19810 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
19820 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
19830 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
19840 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
19850 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
19860 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
19870 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
19880 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
19890 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
198a0 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
198b0 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
198c0 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  tment or RHS of 
198d0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53  INSERT INTO .. S
198e0 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54  ELECT ... */.  T
198f0 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20  oken target;    
19900 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61      /* Target ta
19910 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20  ble for DELETE, 
19920 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a  UPDATE, INSERT *
19930 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
19940 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
19950 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
19960 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
19970 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70  E steps */.  Exp
19980 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74  rList *pExprList
19990 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20  ; /* SET clause 
199a0 66 6f 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c  for UPDATE.  VAL
199b0 55 45 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49  UES clause for I
199c0 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73  NSERT */.  IdLis
199d0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
199e0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
199f0 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
19a00 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
19a10 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
19a20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
19a30 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
19a40 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
19a50 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
19a60 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
19a70 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
19a80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
19a90 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19aa0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
19ab0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
19ac0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
19ad0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
19ae0 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
19af0 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
19b00 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
19b10 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
19b20 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .  .*/.typedef s
19b30 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
19b40 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
19b50 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
19b60 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
19b70 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
19b80 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
19b90 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
19ba0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
19bb0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
19bc0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
19bd0 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e   schema */.  con
19be0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
19bf0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
19c00 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
19c10 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
19c20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
19c30 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
19c40 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
19c50 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
19c60 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
19c70 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
19c80 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
19c90 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
19ca0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
19cb0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
19cc0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
19cd0 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
19ce0 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
19cf0 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
19d00 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
19d10 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
19d20 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
19d30 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
19d40 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
19d50 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
19d60 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19d70 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
19d80 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
19d90 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
19da0 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
19db0 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
19dc0 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
19dd0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
19de0 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
19df0 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
19e00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
19e10 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
19e20 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
19e30 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
19e40 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
19e50 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
19e60 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
19e70 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
19e80 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
19e90 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
19ea0 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
19eb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
19ec0 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
19ed0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
19ee0 20 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b     mallocFailed;
19ef0 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72     /* Becomes tr
19f00 75 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79  ue if any memory
19f10 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c   allocation fail
19f20 73 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d  s */.  u8   useM
19f30 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30  alloc;      /* 0
19f40 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69  : none,  1: sqli
19f50 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a  te3DbMalloc,  2:
19f60 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20   sqlite3_malloc 
19f70 2a 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67  */.  u8   tooBig
19f80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63  ;         /* Bec
19f90 6f 6d 65 73 20 74 72 75 65 20 69 66 20 73 74 72  omes true if str
19fa0 69 6e 67 20 73 69 7a 65 20 65 78 63 65 65 64 73  ing size exceeds
19fb0 20 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f   limits */.};../
19fc0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
19fd0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
19fe0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
19ff0 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
1a000 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
1a010 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
1a020 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
1a030 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
1a040 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
1a050 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
1a060 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1a070 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
1a080 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
1a090 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
1a0a0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
1a0b0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
1a0c0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1a0d0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1a0e0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
1a0f0 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
1a100 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
1a110 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
1a120 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1a130 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
1a140 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1a150 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
1a160 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
1a170 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
1a180 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1a190 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
1a1a0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
1a1b0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
1a1c0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
1a1d0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
1a1e0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1a1f0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
1a200 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1a230 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
1a240 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
1a250 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
1a260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1a270 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
1a280 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
1a290 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1a2c0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
1a2d0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
1a2e0 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
1a2f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1a300 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
1a310 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
1a320 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
1a330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a340 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
1a350 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
1a360 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
1a370 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1a3a0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1a3b0 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1a3c0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1a3d0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1a3e0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1a3f0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1a400 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a420 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1a430 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1a440 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1a450 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1a460 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1a470 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1a480 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1a490 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1a4a0 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1a4b0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1a4c0 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1a4d0 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1a4e0 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1a4f0 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1a500 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1a510 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1a520 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1a550 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1a560 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1a590 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1a5a0 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1a5b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1a5c0 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1a5d0 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1a5e0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1a5f0 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1a600 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1a610 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1a620 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1a630 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1a640 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1a650 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1a660 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1a670 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1a680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a690 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1a6a0 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1a6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a6c0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1a6d0 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1a6e0 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1a6f0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1a700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a710 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1a720 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1a730 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a750 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1a760 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1a770 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1a780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1a790 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1a7a0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1a7b0 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1a7e0 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1a7f0 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1a800 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1a810 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1a820 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1a830 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1a840 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1a850 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1a860 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1a870 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1a880 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1a890 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1a8a0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1a8b0 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1a8c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1a8d0 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1a8e0 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1a8f0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1a900 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1a930 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1a940 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1a950 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1a980 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1a990 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1a9a0 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1a9b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a9c0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1a9d0 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1a9e0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1a9f0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1aa20 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1aa30 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1aa40 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1aa50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1aa60 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1aa70 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1aa80 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1aa90 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1aaa0 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1aab0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1aac0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1aad0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1aae0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1aaf0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ab00 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1ab10 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tex */.  void (*
1ab20 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1ab30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1ab40 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1ab50 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1ab60 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1ab90 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20  t to xLog() */. 
1aba0 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1abb0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1abc0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1abd0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1abe0 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  alls */.#ifdef S
1abf0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1ac00 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1ac10 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1ac20 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1ac30 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1ac40 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1ac50 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  f.};../*.** Cont
1ac60 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1ac70 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1ac80 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1ac90 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1aca0 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1acb0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1acc0 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1acd0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1ace0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1acf0 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1ad00 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1ad10 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1ad20 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1ad30 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1ad40 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
1ad70 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  t.  */.  int wal
1ad80 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1adb0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
1adc0 75 38 20 62 53 65 6c 65 63 74 44 65 70 74 68 46  u8 bSelectDepthF
1add0 69 72 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  irst;           
1ade0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
1adf0 73 75 62 71 75 65 72 69 65 73 20 66 69 72 73 74  subqueries first
1ae00 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
1ae40 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
1ae50 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1ae60 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ae80 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
1ae90 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
1aed0 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  e */.    SrcList
1aee0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
1af10 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
1af20 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
1af30 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
1af40 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
1af50 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
1af60 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
1af70 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1af80 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1af90 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1afa0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1afb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1afc0 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1afd0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1afe0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1aff0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1b000 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1b010 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1b020 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1b030 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1b040 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1b050 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1b060 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1b070 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1b080 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1b090 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1b0a0 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1b0b0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1b0c0 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1b0d0 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1b0e0 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1b0f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1b100 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1b110 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1b120 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1b130 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1b140 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1b150 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1b160 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1b170 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1b180 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
1b190 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1b1a0 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
1b1b0 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
1b1c0 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
1b1d0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
1b1e0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
1b1f0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
1b200 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
1b210 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
1b220 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1b240 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
1b250 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
1b280 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
1b290 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
1b2a0 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
1b2b0 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
1b2f0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
1b300 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
1b310 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1b320 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
1b330 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
1b340 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
1b350 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
1b360 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
1b370 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
1b380 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
1b390 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
1b3a0 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
1b3b0 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
1b3c0 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
1b3d0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
1b3e0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
1b3f0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
1b400 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
1b410 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
1b420 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
1b430 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1b440 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
1b450 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1b460 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1b470 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
1b480 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
1b490 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
1b4a0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1b4b0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1b4c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
1b4d0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
1b4e0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
1b4f0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1b500 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
1b510 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
1b520 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
1b530 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
1b540 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
1b550 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
1b560 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
1b570 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
1b580 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
1b590 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
1b5a0 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
1b5b0 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65   also all.** the
1b5c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1b5d0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
1b5e0 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20  ve as an alisse 
1b5f0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
1b600 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
1b610 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1b620 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
1b630 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1b640 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
1b650 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
1b660 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS3.#endif../
1b670 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
1b680 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
1b690 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
1b6a0 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
1b6b0 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
1b6c0 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
1b6d0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
1b6e0 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
1b6f0 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1b700 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
1b710 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
1b720 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1b730 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
1b740 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
1b750 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
1b760 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
1b770 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1b780 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
1b790 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
1b7a0 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1b7b0 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
1b7c0 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
1b7d0 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
1b7e0 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
1b7f0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
1b800 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
1b810 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
1b820 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
1b830 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
1b840 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
1b850 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
1b860 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
1b870 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
1b880 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
1b890 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1b8a0 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
1b8b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b8c0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
1b8d0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b8e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b8f0 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
1b900 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1b910 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b920 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b930 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
1b940 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b950 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
1b960 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b970 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b980 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
1b990 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1b9a0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b9b0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b9c0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
1b9d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b9e0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
1b9f0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1ba00 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ba10 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
1ba20 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1ba30 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
1ba40 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
1ba50 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
1ba60 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1ba70 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
1ba80 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
1ba90 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1baa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1bab0 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
1bac0 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
1bad0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1bae0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1baf0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
1bb00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1bb10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1bb20 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
1bb30 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
1bb40 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1bb50 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1bb60 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
1bb70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1bb80 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1bb90 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1bba0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
1bbb0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1bbc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
1bbd0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
1bbe0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
1bbf0 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )(x)).#endif../*
1bc00 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
1bc10 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
1bc20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
1bc30 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
1bc40 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
1bc50 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
1bc60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
1bc70 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
1bc80 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
1bc90 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
1bca0 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
1bcb0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1bcc0 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
1bcd0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
1bce0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1bcf0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
1bd00 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  ro(int);.void *s
1bd10 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1bd20 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ro(sqlite3*, int
1bd30 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bd40 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
1bd50 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
1bd60 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
1bd70 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1bd80 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
1bd90 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
1bda0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1bdb0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  har*, int);.void
1bdc0 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
1bdd0 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f  (void*, int);.vo
1bde0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
1bdf0 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
1be00 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  e3 *, void *, in
1be10 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1be20 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
1be30 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  e3 *, void *, in
1be40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1be50 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
1be60 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
1be70 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
1be80 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1be90 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
1bea0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
1beb0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
1bec0 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
1bed0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
1bee0 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
1bef0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
1bf00 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
1bf10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
1bf20 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
1bf30 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
1bf40 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
1bf50 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
1bf60 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
1bf70 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
1bf80 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
1bf90 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
1bfa0 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
1bfb0 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
1bfc0 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
1bfd0 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
1bfe0 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
1bff0 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
1c000 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
1c010 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
1c020 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
1c030 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
1c040 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
1c050 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
1c060 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
1c070 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
1c080 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
1c090 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
1c0a0 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
1c0b0 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
1c0c0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1c0d0 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
1c0e0 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
1c0f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1c100 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
1c110 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c120 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1c130 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
1c140 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c150 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1c160 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
1c170 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
1c180 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1c190 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
1c1a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c1b0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1c1c0 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
1c1d0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
1c1e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c1f0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
1c200 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
1c210 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
1c220 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1c230 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
1c240 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1c250 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
1c260 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1c270 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
1c280 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
1c290 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
1c2a0 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
1c2b0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1c2c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
1c2d0 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
1c2e0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1c2f0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
1c300 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
1c310 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
1c320 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
1c330 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1c340 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
1c350 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
1c360 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
1c370 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1c380 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
1c390 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
1c3a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
1c3b0 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
1c3c0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
1c3d0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
1c3e0 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
1c3f0 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
1c400 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  oid);.#endif..in
1c410 74 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  t sqlite3StatusV
1c420 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
1c430 73 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64  sqlite3StatusAdd
1c440 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
1c450 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
1c460 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  t(int, int);..#i
1c470 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c480 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
1c490 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
1c4a0 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
1c4b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1c4c0 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
1c4d0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
1c4e0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
1c4f0 63 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ccum*, int, cons
1c500 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
1c510 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1c520 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69  E_OMIT_TRACE.voi
1c530 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
1c540 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
1c550 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1c560 65 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69  endif.char *sqli
1c570 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  te3MPrintf(sqlit
1c580 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1c590 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
1c5a0 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c  ite3VMPrintf(sql
1c5b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1c5c0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61  *, va_list);.cha
1c5d0 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e  r *sqlite3MAppen
1c5e0 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72  df(sqlite3*,char
1c5f0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  *,const char*,..
1c600 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .);.#if defined(
1c610 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
1c620 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1c630 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
1c640 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
1c650 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1c660 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
1c670 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1c680 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
1c690 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
1c6a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
1c6b0 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20  ndif../* Output 
1c6c0 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53  formatting for S
1c6d0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45  QLITE_TESTCTRL_E
1c6e0 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65  XPLAIN */.#if de
1c6f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c700 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e  BLE_TREE_EXPLAIN
1c710 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1c720 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62  ExplainBegin(Vdb
1c730 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1c740 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66  te3ExplainPrintf
1c750 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
1c760 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69  ar*, ...);.  voi
1c770 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c780 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  NL(Vdbe*);.  voi
1c790 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1c7a0 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76  Push(Vdbe*);.  v
1c7b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1c7c0 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20  inPop(Vdbe*);.  
1c7d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1c7e0 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29  ainFinish(Vdbe*)
1c7f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1c800 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64  ExplainSelect(Vd
1c810 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20  be*, Select*);. 
1c820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1c830 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20  lainExpr(Vdbe*, 
1c840 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
1c850 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70  qlite3ExplainExp
1c860 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70  rList(Vdbe*, Exp
1c870 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74  rList*);.  const
1c880 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64   char *sqlite3Vd
1c890 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64  beExplanation(Vd
1c8a0 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  be*);.#else.# de
1c8b0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1c8c0 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65  ainBegin(X).# de
1c8d0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1c8e0 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23  ainSelect(A,B).#
1c8f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1c900 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a  xplainExpr(A,B).
1c910 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c920 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28  ExplainExprList(
1c930 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1c940 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69  lite3ExplainFini
1c950 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  sh(X).# define s
1c960 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1c970 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69  ation(X) 0.#endi
1c980 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
1c990 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
1c9a0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
1c9b0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1c9c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
1c9d0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
1c9e0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1c9f0 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
1ca00 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
1ca10 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
1ca20 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
1ca30 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
1ca40 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
1ca50 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
1ca60 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
1ca70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
1ca80 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
1ca90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
1caa0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
1cab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1cac0 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
1cad0 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
1cae0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
1caf0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
1cb00 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1cb10 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
1cb20 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
1cb30 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
1cb40 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
1cb50 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
1cb60 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
1cb70 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
1cb80 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
1cb90 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
1cba0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1cbb0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1cbc0 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
1cbd0 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
1cbe0 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
1cbf0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
1cc00 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
1cc10 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
1cc20 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
1cc30 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1cc40 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
1cc50 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
1cc60 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1cc70 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
1cc80 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
1cc90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cca0 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
1ccb0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
1ccc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ccd0 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74  ExprDelete(sqlit
1cce0 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  e3*, Expr*);.Exp
1ccf0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
1cd00 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72  prListAppend(Par
1cd10 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
1cd20 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1cd30 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
1cd40 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
1cd50 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
1cd60 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cd70 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
1cd80 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
1cd90 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
1cda0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
1cdb0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
1cdc0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1cdd0 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
1cde0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
1cdf0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1ce00 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
1ce10 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
1ce20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1ce30 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
1ce40 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
1ce50 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1ce60 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
1ce70 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73  asOfConnection(s
1ce80 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1ce90 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
1cea0 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e  hema(sqlite3*,in
1ceb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cec0 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65  CollapseDatabase
1ced0 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b  Array(sqlite3*);
1cee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
1cef0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69  inParse(Parse*,i
1cf00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cf10 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
1cf20 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
1cf30 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1cf40 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63  ResultSetOfSelec
1cf50 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a  t(Parse*,Select*
1cf60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
1cf70 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50  penMasterTable(P
1cf80 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  arse *, int);.vo
1cf90 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
1cfa0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
1cfb0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
1cfc0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
1cfd0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
1cfe0 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
1cff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1d000 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
1d010 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d020 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
1d030 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1d040 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
1d050 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d060 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
1d070 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
1d080 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d090 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
1d0a0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1d0b0 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
1d0c0 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
1d0d0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
1d0e0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
1d0f0 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
1d100 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1d110 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
1d120 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1d130 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  *,Select*);.int 
1d140 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
1d150 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
1d160 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
1d170 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
1d180 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1d190 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
1d1a0 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
1d1b0 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
1d1c0 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
1d1d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
1d1e0 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
1d1f0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76  (Parse *);..Bitv
1d200 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
1d210 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
1d220 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
1d230 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
1d240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1d250 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
1d260 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
1d270 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
1d280 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
1d290 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1d2a0 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
1d2b0 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
1d2c0 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
1d2d0 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c  itvec*);.int sql
1d2e0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
1d2f0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
1d300 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
1d310 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
1d320 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73  te3*, void*, uns
1d330 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64  igned int);.void
1d340 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
1d350 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f  ear(RowSet*);.vo
1d360 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
1d370 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
1d380 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1d390 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
1d3a0 65 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20  et*, u8 iBatch, 
1d3b0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1d3c0 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
1d3d0 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
1d3e0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
1d3f0 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
1d400 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d410 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
1d420 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
1d430 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
1d440 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
1d450 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1d460 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
1d470 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1d480 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
1d490 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
1d4a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
1d4b0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
1d4c0 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
1d4d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1d4e0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
1d4f0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
1d500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d510 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
1d520 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1d530 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d540 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
1d550 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
1d560 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1d570 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1d580 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
1d590 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1d5a0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
1d5b0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
1d5c0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
1d5d0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
1d5e0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
1d5f0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
1d600 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
1d610 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d620 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
1d630 64 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d(X).#endif.int 
1d640 73 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75  sqlite3CodeCorou
1d650 74 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c  tine(Parse*, Sel
1d660 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
1d670 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d680 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53  Insert(Parse*, S
1d690 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
1d6a0 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
1d6b0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
1d6c0 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
1d6d0 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
1d6e0 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
1d6f0 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
1d700 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
1d710 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
1d720 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
1d730 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
1d740 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
1d750 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
1d760 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1d770 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
1d780 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
1d790 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
1d7a0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1d7b0 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
1d7c0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1d7d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
1d7e0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1d7f0 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
1d800 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
1d810 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
1d820 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
1d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d840 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
1d850 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
1d860 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1d870 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
1d880 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
1d890 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
1d8a0 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  en *);.int sqlit
1d8b0 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
1d8c0 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
1d8d0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
1d8e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1d8f0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
1d900 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
1d910 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1d920 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
1d930 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1d940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1d950 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
1d960 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
1d970 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1d980 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1d990 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
1d9a0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
1d9b0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
1d9c0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
1d9d0 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
1d9e0 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 45 78 70       Token*, Exp
1da10 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
1da20 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
1da30 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
1da40 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
1da50 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
1da60 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
1da70 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
1da80 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1da90 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
1daa0 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
1dab0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
1dac0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dad0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
1dae0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
1daf0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
1db00 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
1db10 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1db20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
1db30 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
1db40 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
1db50 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
1db60 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
1db70 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1db80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1db90 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
1dba0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
1dbb0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
1dbc0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
1dbd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
1dbe0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
1dbf0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
1dc00 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
1dc10 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
1dc20 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
1dc30 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
1dc40 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
1dc50 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
1dc60 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
1dc70 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
1dc80 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1dc90 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1dca0 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
1dcb0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1dcc0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
1dcd0 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
1dce0 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
1dcf0 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
1dd00 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
1dd10 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
1dd20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1dd30 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
1dd40 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
1dd50 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
1dd60 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
1dd70 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
1dd80 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
1dd90 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1dda0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
1ddb0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
1ddc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1ddd0 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
1dde0 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
1ddf0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
1de00 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
1de10 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1de20 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
1de30 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1de40 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1de50 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1de60 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1de70 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
1de80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1de90 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1dea0 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1deb0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1dec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ded0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1dee0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1def0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1df00 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
1df10 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1df20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1df30 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
1df40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1df50 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1df60 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  op(Parse*, 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 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
1df90 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1dfa0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1dfb0 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
1dfc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1dfd0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
1dfe0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
1dff0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1e000 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
1e010 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1e020 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1e030 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
1e040 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
1e050 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e060 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
1e070 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1e080 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e090 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
1e0a0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1e0b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e0c0 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28  prCodeConstants(
1e0d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1e0e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e0f0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
1e100 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1e110 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1e120 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
1e130 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e140 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1e150 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
1e160 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
1e170 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
1e180 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
1e190 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
1e1a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1e1b0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1e1c0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1e1d0 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
1e1e0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
1e1f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1e200 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
1e210 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
1e220 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1e230 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1e240 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
1e250 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
1e260 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1e270 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1e280 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e290 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1e2a0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
1e2b0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1e2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1e2d0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
1e2e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1e2f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1e300 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
1e310 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
1e320 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
1e330 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
1e340 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
1e350 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
1e360 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
1e370 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
1e380 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
1e390 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e3a0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
1e3b0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
1e3c0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1e3d0 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
1e3e0 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
1e3f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e400 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1e410 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1e420 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1e430 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1e440 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1e450 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1e460 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1e470 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1e480 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1e490 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1e4a0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1e4b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e4c0 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1e4d0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1e4e0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1e4f0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1e500 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1e510 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1e520 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1e530 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1e540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e550 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1e560 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1e570 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1e580 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1e590 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1e5a0 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1e5b0 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1e5c0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1e5d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e5e0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1e5f0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1e600 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1e610 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1e620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e630 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1e640 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1e650 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1e660 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1e670 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1e680 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1e690 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1e6a0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1e6b0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1e6c0 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1e6d0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1e6e0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1e6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e700 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1e710 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1e720 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1e730 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1e740 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1e750 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1e760 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1e770 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1e780 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1e790 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1e7a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1e7b0 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1e7c0 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1e7d0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1e7e0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1e7f0 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1e800 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e810 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1e820 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1e830 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e840 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1e850 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1e860 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1e870 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1e880 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1e890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1e8a0 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1e8b0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1e8c0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1e8d0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1e8e0 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1e8f0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1e900 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e930 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1e940 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1e950 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1e960 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1e970 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e980 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1e990 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1e9a0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1e9b0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1e9c0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1e9d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1e9e0 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1e9f0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1ea00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1ea10 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1ea20 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1ea30 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1ea40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ea50 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1ea60 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1ea70 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78   char*, int);.Ex
1ea80 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44  pr *sqlite3ExprD
1ea90 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
1eaa0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74  *,int);.ExprList
1eab0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
1eac0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  tDup(sqlite3*,Ex
1ead0 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72  prList*,int);.Sr
1eae0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1eaf0 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  cListDup(sqlite3
1eb00 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b  *,SrcList*,int);
1eb10 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
1eb20 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  IdListDup(sqlite
1eb30 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c  3*,IdList*);.Sel
1eb40 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
1eb50 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  ctDup(sqlite3*,S
1eb60 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  elect*,int);.voi
1eb70 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
1eb80 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
1eb90 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
1eba0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
1ebb0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
1ebc0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1ebd0 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
1ebe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1ebf0 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
1ec00 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
1ec10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1ec20 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
1ec30 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
1ec40 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1ec50 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
1ec60 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
1ec70 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
1ec80 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
1ec90 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
1eca0 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
1ecb0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1ecc0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
1ecd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
1ece0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ecf0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
1ed00 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1ed10 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
1ed20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
1ed30 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
1ed40 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
1ed50 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
1ed60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ed70 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
1ed80 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1ed90 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1eda0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1edb0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
1edc0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
1edf0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1ee00 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
1ee10 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
1ee20 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
1ee30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
1ee40 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
1ee50 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
1ee60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1ee70 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
1ee80 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
1ee90 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
1eea0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
1eeb0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
1eec0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
1eed0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
1eee0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
1eef0 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
1ef00 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
1ef10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
1ef20 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
1ef30 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
1ef40 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
1ef50 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
1ef80 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1ef90 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1efa0 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
1efb0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
1efc0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
1efd0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1efe0 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
1eff0 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
1f000 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1f010 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
1f020 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1f030 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
1f040 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
1f050 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
1f060 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f070 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
1f080 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
1f090 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1f0a0 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
1f0b0 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
1f0c0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
1f0d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69            ExprLi
1f100 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b  st*,Select*,u8);
1f110 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f120 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70  sqlite3TriggerUp
1f130 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  dateStep(sqlite3
1f140 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
1f150 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a  t*, Expr*, u8);.
1f160 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1f170 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c  qlite3TriggerDel
1f180 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  eteStep(sqlite3*
1f190 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b  ,Token*, Expr*);
1f1a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1f1b0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
1f1c0 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29  ite3*, Trigger*)
1f1d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f1e0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1f1f0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1f200 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1f210 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54  ;.  u32 sqlite3T
1f220 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61  riggerColmask(Pa
1f230 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78  rse*,Trigger*,Ex
1f240 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c  prList*,int,int,
1f250 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64  Table*,int);.# d
1f260 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
1f270 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  seToplevel(p) ((
1f280 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20  p)->pToplevel ? 
1f290 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a  (p)->pToplevel :
1f2a0 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65   (p)).#else.# de
1f2b0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1f2c0 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
1f2d0 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
1f2e0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
1f2f0 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
1f300 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
1f310 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
1f320 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
1f330 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
1f340 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
1f350 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
1f360 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
1f370 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
1f380 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
1f390 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
1f3a0 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
1f3b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1f3c0 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
1f3d0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
1f3e0 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
1f3f0 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
1f400 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
1f410 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
1f420 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
1f430 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
1f440 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1f450 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1f460 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f470 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
1f480 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1f490 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
1f4a0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
1f4b0 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
1f4c0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
1f4d0 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
1f4e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
1f4f0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
1f500 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
1f510 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
1f520 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
1f530 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
1f540 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
1f550 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1f560 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1f570 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
1f580 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
1f590 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
1f5a0 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
1f5b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
1f5c0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
1f5d0 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
1f5e0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
1f5f0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
1f600 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
1f610 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
1f620 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
1f630 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1f640 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
1f650 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
1f660 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
1f670 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
1f680 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
1f690 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
1f6a0 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
1f6b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1f6c0 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
1f6d0 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
1f6e0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
1f6f0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
1f700 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
1f710 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f720 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
1f730 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f740 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
1f750 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
1f760 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
1f770 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
1f780 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
1f790 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
1f7a0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1f7b0 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
1f7c0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
1f7d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
1f7e0 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
1f7f0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f800 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
1f810 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
1f820 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f830 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
1f840 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
1f850 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
1f860 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
1f870 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
1f880 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
1f890 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
1f8a0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
1f8b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
1f8c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
1f8d0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
1f8e0 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
1f8f0 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
1f900 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
1f910 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
1f920 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
1f930 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
1f940 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
1f950 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a  const u8**);../*
1f960 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
1f970 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
1f980 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1f990 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
1f9a0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
1f9b0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
1f9c0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
1f9d0 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
1f9e0 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
1f9f0 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73  ** file.  Code s
1fa00 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41  hould use the MA
1fa10 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c  CRO forms below,
1fa20 20 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32   as the Varint32
1fa30 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65   versions.** are
1fa40 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65   coded to assume
1fa50 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65   the single byte
1fa60 20 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79   case is already
1fa70 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20   handled (which 
1fa80 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  .** the MACRO fo
1fa90 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74  rm does)..*/.int
1faa0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1fab0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
1fac0 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , u64);.int sqli
1fad0 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75  te3PutVarint32(u
1fae0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
1faf0 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  32);.u8 sqlite3G
1fb00 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
1fb10 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
1fb20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
1fb30 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
1fb40 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1fb50 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
1fb60 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
1fb70 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
1fb80 20 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61   The header of a
1fb90 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73   record consists
1fba0 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76   of a sequence v
1fbb0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
1fbc0 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
1fbd0 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61  e integers are a
1fbe0 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61  lmost always sma
1fbf0 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64  ll and are encod
1fc00 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62  ed as a single b
1fc10 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  yte..** The foll
1fc20 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b  owing macros tak
1fc30 65 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73  e advantage this
1fc40 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65   fact to provide
1fc50 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a   a fast encode.*
1fc60 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20  * and decode of 
1fc70 74 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  the integers in 
1fc80 61 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e  a record header.
1fc90 20 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66    It is faster f
1fca0 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a  or the common.**
1fcb0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
1fcc0 69 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e  integer is a sin
1fcd0 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73  gle byte.  It is
1fce0 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72   a little slower
1fcf0 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74   when the.** int
1fd00 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d  eger is two or m
1fd10 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20  ore bytes.  But 
1fd20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61  overall it is fa
1fd30 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ster..**.** The 
1fd40 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73  following expres
1fd50 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61  sions are equiva
1fd60 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  lent:.**.**     
1fd70 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61  x = sqlite3GetVa
1fd80 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b  rint32( A, &B );
1fd90 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
1fda0 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20  te3PutVarint32( 
1fdb0 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20  A, B );.**.**   
1fdc0 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33    x = getVarint3
1fdd0 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20  2( A, B );.**   
1fde0 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33    x = putVarint3
1fdf0 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f  2( A, B );.**.*/
1fe00 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
1fe10 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
1fe20 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
1fe30 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
1fe40 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
1fe50 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
1fe60 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
1fe70 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
1fe80 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
1fe90 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
1fea0 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
1feb0 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
1fec0 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
1fed0 69 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a  int32((A),(B))).
1fee0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
1fef0 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
1ff00 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
1ff10 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
1ff20 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
1ff30 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
1ff40 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
1ff50 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
1ff60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ff70 54 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72  TableAffinityStr
1ff80 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
1ff90 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
1ffa0 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
1ffb0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
1ffc0 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
1ffd0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
1ffe0 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
1fff0 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
20000 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
20010 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
20020 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
20030 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
20040 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
20050 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
20060 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
20070 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
20080 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
20090 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
200a0 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
200b0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
200c0 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
200d0 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
200e0 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
200f0 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
20100 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
20110 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
20120 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
20130 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
20140 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
20150 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
20160 28 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53  (SQLITE_DEBUG_OS
20170 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68  _TRACE).const ch
20180 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
20190 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
201a0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
201b0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
201c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
201d0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
201e0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
201f0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
20200 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
20210 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
20220 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
20230 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
20240 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
20250 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
20260 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
20270 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
20280 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
20290 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
202a0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
202b0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
202c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
202d0 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45  xpr*, Token*);.E
202e0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
202f0 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
20300 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
20310 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
20320 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
20330 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
20340 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
20350 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
20360 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
20370 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
20380 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
20390 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
203a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
203b0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
203c0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
203d0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
203e0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
203f0 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
20400 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
20410 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
20420 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
20430 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
20440 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
20450 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
20460 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
20470 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
20480 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
20490 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
204a0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
204b0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
204c0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
204d0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
204e0 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
204f0 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
20500 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
20510 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
20520 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
20530 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
20540 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
20550 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
20560 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
20570 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
20580 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
20590 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
205a0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
205b0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
205c0 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
205d0 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
205e0 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
205f0 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
20600 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
20610 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
20620 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
20630 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
20640 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
20650 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  3.char *sqlite3U
20660 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20  tf8to16(sqlite3 
20670 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69  *, u8, char *, i
20680 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64  nt, int *);.#end
20690 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
206a0 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
206b0 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
206c0 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
206d0 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
206e0 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
206f0 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
20700 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
20710 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
20720 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
20730 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
20740 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
20750 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
20760 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
20770 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
20780 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20790 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
207a0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
207b0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
207c0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
207d0 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
207e0 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
207f0 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
20800 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
20810 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
20820 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
20830 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
20840 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
20850 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
20860 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
20870 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
20880 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
20890 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
208a0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
208b0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
208c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
208d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
208e0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
208f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
20900 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
20910 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
20920 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
20930 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
20940 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
20950 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
20960 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
20970 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
20980 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
20990 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
209a0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
209b0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
209c0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
209d0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
209e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
209f0 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
20a00 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
20a10 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
20a20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
20a30 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
20a40 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
20a50 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
20a60 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65  te3MatchSpanName
20a70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  (const char*, co
20a80 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20a90 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
20aa0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
20ab0 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65  3ResolveExprName
20ac0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
20ad0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
20ae0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
20af0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
20b00 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
20b10 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
20b20 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
20b30 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
20b40 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
20b50 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
20b60 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
20b70 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
20b80 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
20b90 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
20ba0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20bb0 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
20bc0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
20bd0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
20be0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
20bf0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
20c00 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
20c10 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
20c20 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
20c30 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
20c40 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
20c50 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
20c60 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
20c70 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
20c80 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
20c90 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
20ca0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
20cb0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
20cc0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
20cd0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20ce0 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
20cf0 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
20d00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20d10 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
20d20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
20d30 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
20d40 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
20d50 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
20d60 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
20d70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
20d80 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
20d90 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
20da0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
20db0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
20dc0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
20dd0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
20de0 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
20df0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
20e00 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
20e10 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
20e20 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
20e30 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
20e40 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69  void sqlite3Mini
20e50 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61  mumFileFormat(Pa
20e60 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
20e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
20e80 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
20e90 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
20ea0 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
20eb0 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
20ec0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
20ed0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
20ee0 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
20ef0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
20f00 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61  3IndexKeyinfo(Pa
20f10 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  rse *, Index *);
20f20 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
20f30 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
20f40 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
20f50 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
20f60 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
20f70 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
20f80 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
20f90 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
20fa0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
20fb0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
20fc0 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
20fd0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
20fe0 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
20ff0 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
21000 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  or.);.int sqlite
21010 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
21020 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
21030 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
21040 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
21050 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
21060 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
21070 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ccum*, char*, in
21080 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21090 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
210a0 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
210b0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
210c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65  void sqlite3Appe
210d0 6e 64 53 70 61 63 65 28 53 74 72 41 63 63 75 6d  ndSpace(StrAccum
210e0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  *,int);.char *sq
210f0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
21100 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
21110 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
21120 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
21130 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
21140 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
21150 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
21160 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
21170 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
21180 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
21190 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
211a0 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
211b0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
211c0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
211d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
211e0 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
211f0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
21200 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
21210 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  ;../*.** The int
21220 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
21230 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
21240 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
21250 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
21260 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74  (void*(*)(size_t
21270 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
21280 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
21290 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
212a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
212b0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
212c0 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
212d0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
212e0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
212f0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
21300 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
21310 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
21320 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
21330 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
21340 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
21350 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
21360 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
21370 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
21380 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
21390 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
213a0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
213b0 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
213c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
213d0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
213e0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
213f0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
21400 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
21410 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21420 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
21430 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
21440 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
21450 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
21460 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
21470 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
21480 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
21490 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
214a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
214b0 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
214c0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
214d0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
214e0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
214f0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
21500 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21510 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
21520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21530 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
21540 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21550 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
21560 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21570 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20  VtabLock(X) .#  
21580 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21590 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
215a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
215b0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
215c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
215d0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
215e0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
215f0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21600 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
21610 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
21620 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
21630 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
21640 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
21650 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
21660 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
21670 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
21680 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
21690 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
216a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68  (sqlite3 *db, ch
216b0 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73  ar **);.   int s
216c0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
216d0 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ck(sqlite3 *db);
216e0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
216f0 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65  tabCommit(sqlite
21700 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20  3 *db);.   void 
21710 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
21720 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
21730 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
21740 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  lock(VTable *);.
21750 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
21760 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71  tabUnlockList(sq
21770 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20  lite3*);.   int 
21780 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
21790 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  oint(sqlite3 *, 
217a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54  int, int);.   VT
217b0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
217c0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
217d0 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
217e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
217f0 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
21800 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
21810 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
21820 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
21830 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
21840 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
21850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21860 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
21870 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
21880 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
21890 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
218a0 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
218b0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
218c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
218d0 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
218e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
218f0 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
21900 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
21910 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
21920 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
21930 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
21940 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
21950 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
21960 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
21970 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
21980 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
21990 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
219a0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
219b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
219c0 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
219d0 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
219e0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
219f0 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
21a00 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
21a10 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
21a20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
21a30 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e  qlite3InvalidFun
21a40 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f  ction(sqlite3_co
21a50 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
21a60 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74  e3_value**);.int
21a70 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61   sqlite3VdbePara
21a80 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a  meterIndex(Vdbe*
21a90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  , const char*, i
21aa0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21ab0 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
21ac0 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c  (sqlite3_stmt *,
21ad0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29   sqlite3_stmt *)
21ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70  ;.int sqlite3Rep
21af0 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76  repare(Vdbe*);.v
21b00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
21b10 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50  istCheckLength(P
21b20 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
21b30 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21b40 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
21b50 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c  BinaryCompareCol
21b60 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78  lSeq(Parse *, Ex
21b70 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69  pr *, Expr *);.i
21b80 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e  nt sqlite3TempIn
21b90 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c  Memory(const sql
21ba0 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  ite3*);.const ch
21bb0 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
21bc0 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
21bd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21be0 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73  OMIT_WAL.  int s
21bf0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
21c00 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
21c10 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  int, int*, int*)
21c20 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57  ;.  int sqlite3W
21c30 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f  alDefaultHook(vo
21c40 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
21c50 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23  st char*,int);.#
21c60 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72  endif../* Declar
21c70 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
21c80 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
21c90 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
21ca0 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
21cb0 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
21cc0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
21cd0 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
21ce0 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
21cf0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
21d00 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
21d10 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
21d20 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
21d30 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
21d40 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
21d50 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
21d60 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
21d70 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
21d80 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
21d90 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
21da0 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
21db0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
21dc0 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  s .** provided (
21dd0 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
21de0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
21df0 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
21e00 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
21e10 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
21e20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
21e30 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
21e40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
21e50 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
21e60 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
21e70 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
21e80 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
21e90 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
21ea0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
21eb0 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
21ec0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21ed0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
21ee0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
21ef0 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  st*, int);.  int
21f00 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
21f10 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
21f20 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
21f30 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
21f40 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
21f50 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
21f60 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
21f70 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
21f80 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
21f90 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
21fa0 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
21fb0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
21fc0 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69  a,b,c,d).  #defi
21fd0 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
21fe0 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
21ff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
22000 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
22010 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
22020 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
22030 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69  a,b,c,d) 0.#endi
22040 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
22050 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
22060 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
22070 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
22080 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
22090 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
220a0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
220b0 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
220c0 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
220d0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
220e0 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
220f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22100 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
22110 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
22120 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
22130 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
22140 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
22150 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
22160 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
22170 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
22180 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
22190 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
221a0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
221b0 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
221c0 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
221d0 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
221e0 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
221f0 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
22200 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
22210 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
22220 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
22230 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f  sent if SQLITE_O
22240 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
22250 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
22260 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
22270 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
22280 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  IN_TEST.  void s
22290 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
222a0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
222b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
222c0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
222d0 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
222e0 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
222f0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
22300 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22310 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
22320 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e  ).#endif..#defin
22330 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44  e IN_INDEX_ROWID
22340 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64 65             1.#de
22350 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
22360 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a  H             2.
22370 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
22380 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20 20  _INDEX_ASC      
22390 20 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e   3.#define IN_IN
223a0 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20  DEX_INDEX_DESC  
223b0 20 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74 65      4.int sqlite
223c0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
223d0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  se *, Expr *, in
223e0 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  t*);..#ifdef SQL
223f0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
22400 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71  C_WRITE.  int sq
22410 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
22420 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
22430 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
22440 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
22450 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  t, int);.  int s
22460 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
22470 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
22480 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
22490 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
224a0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20  ite3_file *);.  
224b0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
224c0 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  alExists(sqlite3
224d0 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65  _file *p);.#else
224e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
224f0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56  e3JournalSize(pV
22500 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f  fs) ((pVfs)->szO
22510 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65  sFile).  #define
22520 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
22530 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69  xists(p) 1.#endi
22540 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  f..void sqlite3M
22550 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
22560 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69  lite3_file *);.i
22570 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  nt sqlite3MemJou
22580 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a  rnalSize(void);.
22590 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d  int sqlite3IsMem
225a0 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f  Journal(sqlite3_
225b0 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51  file *);..#if SQ
225c0 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
225d0 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c  PTH>0.  void sql
225e0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
225f0 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  t(Parse *pParse,
22600 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74   Expr *p);.  int
22610 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
22620 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
22630 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22640 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
22650 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
22660 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
22670 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
22680 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ght(x,y).  #defi
22690 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
226a0 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
226b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
226c0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
226d0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
226e0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
226f0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
22700 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
22710 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
22720 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
22730 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
22740 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
22750 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
22760 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
22770 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
22780 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
22790 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
227a0 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
227b0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
227c0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
227d0 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
227e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
227f0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
22800 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
22810 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
22820 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
22830 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
22840 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
22850 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
22860 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
22870 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
22880 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
22890 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   *);.#endif../*.
228a0 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
228b0 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20  _ENABLE IOTRACE 
228c0 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20  exists then the 
228d0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a  global variable.
228e0 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ** sqlite3IoTrac
228f0 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
22900 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20  o a printf-like 
22910 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a  routine used to.
22920 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61  ** print I/O tra
22930 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a  cing messages. .
22940 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
22950 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
22960 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
22970 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
22980 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
22990 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
229a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
229b0 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
229c0 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52  *);.SQLITE_EXTER
229d0 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33  N void (*sqlite3
229e0 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
229f0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
22a00 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
22a10 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
22a20 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
22a30 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
22a40 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
22a50 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
22a60 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
22a70 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
22a80 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
22a90 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
22aa0 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
22ab0 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
22ac0 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
22ad0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
22ae0 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
22af0 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
22b00 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
22b10 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
22b20 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
22b30 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
22b40 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
22b50 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
22b60 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
22b70 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
22b80 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
22b90 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
22ba0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
22bb0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
22bc0 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
22bd0 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
22be0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
22bf0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
22c00 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
22c10 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
22c20 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
22c30 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
22c40 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
22c50 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
22c60 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
22c70 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
22c80 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
22c90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
22ca0 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
22cb0 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
22cc0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
22cd0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
22ce0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
22cf0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
22d00 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
22d10 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
22d20 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
22d30 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
22d40 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
22d50 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
22d60 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
22d70 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
22d80 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
22d90 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
22da0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
22db0 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
22dc0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
22dd0 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
22de0 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
22df0 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
22e00 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
22e10 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
22e20 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
22e30 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
22e40 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
22e50 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
22e60 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
22e70 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
22e80 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
22e90 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
22ea0 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
22eb0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
22ec0 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
22ed0 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
22ee0 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
22ef0 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
22f00 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
22f10 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
22f20 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
22f30 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41  traint. .**.** A
22f40 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
22f50 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
22f60 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
22f70 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
22f80 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
22f90 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
22fa0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
22fb0 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
22fc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
22fd0 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
22fe0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
22ff0 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
23000 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
23010 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
23020 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
23030 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
23040 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
23050 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23060 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
23070 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
23080 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
23090 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
230a0 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
230b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
230c0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
230d0 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
230e0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
230f0 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
23100 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
23110 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
23120 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
23130 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
23140 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62 65  /* Might have be
23150 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  en lookaside mem
23160 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ory */.#define M
23170 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20  EMTYPE_SCRATCH  
23180 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74    0x04  /* Scrat
23190 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ch allocations *
231a0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
231b0 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
231c0 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  8  /* Page cache
231d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
231e0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
231f0 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30 20  DB         0x10 
23200 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33   /* Uses sqlite3
23210 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71  DbMalloc, not sq
23220 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a  lite_malloc */..
23230 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54  #endif /* _SQLIT
23240 45 49 4e 54 5f 48 5f 20 2a 2f 0a                 EINT_H_ */.