| Index: third_party/sqlite/src/src/sqliteInt.h
 | 
| diff --git a/third_party/sqlite/src/src/sqliteInt.h b/third_party/sqlite/src/src/sqliteInt.h
 | 
| index c01bbc78698e35a70acbb169aaf9d6be21a88468..ee58edad775c046bef6193a8f550105a3cf968f1 100644
 | 
| --- a/third_party/sqlite/src/src/sqliteInt.h
 | 
| +++ b/third_party/sqlite/src/src/sqliteInt.h
 | 
| @@ -12,8 +12,54 @@
 | 
|  ** Internal interface definitions for SQLite.
 | 
|  **
 | 
|  */
 | 
| -#ifndef _SQLITEINT_H_
 | 
| -#define _SQLITEINT_H_
 | 
| +#ifndef SQLITEINT_H
 | 
| +#define SQLITEINT_H
 | 
| +
 | 
| +/* Special Comments:
 | 
| +**
 | 
| +** Some comments have special meaning to the tools that measure test
 | 
| +** coverage:
 | 
| +**
 | 
| +**    NO_TEST                     - The branches on this line are not
 | 
| +**                                  measured by branch coverage.  This is
 | 
| +**                                  used on lines of code that actually
 | 
| +**                                  implement parts of coverage testing.
 | 
| +**
 | 
| +**    OPTIMIZATION-IF-TRUE        - This branch is allowed to alway be false
 | 
| +**                                  and the correct answer is still obtained,
 | 
| +**                                  though perhaps more slowly.
 | 
| +**
 | 
| +**    OPTIMIZATION-IF-FALSE       - This branch is allowed to alway be true
 | 
| +**                                  and the correct answer is still obtained,
 | 
| +**                                  though perhaps more slowly.
 | 
| +**
 | 
| +**    PREVENTS-HARMLESS-OVERREAD  - This branch prevents a buffer overread
 | 
| +**                                  that would be harmless and undetectable
 | 
| +**                                  if it did occur.  
 | 
| +**
 | 
| +** In all cases, the special comment must be enclosed in the usual
 | 
| +** slash-asterisk...asterisk-slash comment marks, with no spaces between the 
 | 
| +** asterisks and the comment text.
 | 
| +*/
 | 
| +
 | 
| +/*
 | 
| +** Make sure the Tcl calling convention macro is defined.  This macro is
 | 
| +** only used by test code and Tcl integration code.
 | 
| +*/
 | 
| +#ifndef SQLITE_TCLAPI
 | 
| +#  define SQLITE_TCLAPI
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
| +** Make sure that rand_s() is available on Windows systems with MSVC 2005
 | 
| +** or higher.
 | 
| +*/
 | 
| +#if defined(_MSC_VER) && _MSC_VER>=1400
 | 
| +/* TODO(shess): Already defined by build/config/win/BUILD.gn */
 | 
| +#ifndef _CRT_RAND_S
 | 
| +#  define _CRT_RAND_S
 | 
| +#endif
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** Include the header file used to customize the compiler options for MSVC.
 | 
| @@ -60,12 +106,28 @@
 | 
|  # define _LARGEFILE_SOURCE 1
 | 
|  #endif
 | 
|  
 | 
| -/* What version of GCC is being used.  0 means GCC is not being used */
 | 
| -#ifdef __GNUC__
 | 
| +/* The GCC_VERSION, CLANG_VERSION, and MSVC_VERSION macros are used to
 | 
| +** conditionally include optimizations for each of these compilers.  A
 | 
| +** value of 0 means that compiler is not being used.  The
 | 
| +** SQLITE_DISABLE_INTRINSIC macro means do not use any compiler-specific
 | 
| +** optimizations, and hence set all compiler macros to 0
 | 
| +*/
 | 
| +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC)
 | 
|  # define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__)
 | 
|  #else
 | 
|  # define GCC_VERSION 0
 | 
|  #endif
 | 
| +#if defined(__clang__) && !defined(_WIN32) && !defined(SQLITE_DISABLE_INTRINSIC)
 | 
| +# define CLANG_VERSION \
 | 
| +            (__clang_major__*1000000+__clang_minor__*1000+__clang_patchlevel__)
 | 
| +#else
 | 
| +# define CLANG_VERSION 0
 | 
| +#endif
 | 
| +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC)
 | 
| +# define MSVC_VERSION _MSC_VER
 | 
| +#else
 | 
| +# define MSVC_VERSION 0
 | 
| +#endif
 | 
|  
 | 
|  /* Needed for various definitions... */
 | 
|  #if defined(__GNUC__) && !defined(_GNU_SOURCE)
 | 
| @@ -149,7 +211,7 @@
 | 
|  ** to the next, so we have developed the following set of #if statements
 | 
|  ** to generate appropriate macros for a wide range of compilers.
 | 
|  **
 | 
| -** The correct "ANSI" way to do this is to use the intptr_t type. 
 | 
| +** The correct "ANSI" way to do this is to use the intptr_t type.
 | 
|  ** Unfortunately, that typedef is not available on all compilers, or
 | 
|  ** if it is available, it requires an #include of specific headers
 | 
|  ** that vary from one machine to the next.
 | 
| @@ -174,21 +236,6 @@
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| -** The SQLITE_WITHIN(P,S,E) macro checks to see if pointer P points to
 | 
| -** something between S (inclusive) and E (exclusive).
 | 
| -**
 | 
| -** In other words, S is a buffer and E is a pointer to the first byte after
 | 
| -** the end of buffer S.  This macro returns true if P points to something
 | 
| -** contained within the buffer S.
 | 
| -*/
 | 
| -#if defined(HAVE_STDINT_H)
 | 
| -# define SQLITE_WITHIN(P,S,E) \
 | 
| -    ((uintptr_t)(P)>=(uintptr_t)(S) && (uintptr_t)(P)<(uintptr_t)(E))
 | 
| -#else
 | 
| -# define SQLITE_WITHIN(P,S,E) ((P)>=(S) && (P)<(E))
 | 
| -#endif
 | 
| -
 | 
| -/*
 | 
|  ** A macro to hint to the compiler that a function should not be
 | 
|  ** inlined.
 | 
|  */
 | 
| @@ -206,11 +253,12 @@
 | 
|  ** the SQLITE_DISABLE_INTRINSIC define.
 | 
|  */
 | 
|  #if !defined(SQLITE_DISABLE_INTRINSIC)
 | 
| -#  if defined(_MSC_VER) && _MSC_VER>=1300
 | 
| +#  if defined(_MSC_VER) && _MSC_VER>=1400
 | 
|  #    if !defined(_WIN32_WCE)
 | 
|  #      include <intrin.h>
 | 
|  #      pragma intrinsic(_byteswap_ushort)
 | 
|  #      pragma intrinsic(_byteswap_ulong)
 | 
| +#      pragma intrinsic(_byteswap_uint64)
 | 
|  #      pragma intrinsic(_ReadWriteBarrier)
 | 
|  #    else
 | 
|  #      include <cmnintrin.h>
 | 
| @@ -316,7 +364,7 @@
 | 
|  ** is set.  Thus NDEBUG becomes an opt-in rather than an opt-out
 | 
|  ** feature.
 | 
|  */
 | 
| -#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
 | 
| +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
 | 
|  # define NDEBUG 1
 | 
|  #endif
 | 
|  #if defined(NDEBUG) && defined(SQLITE_DEBUG)
 | 
| @@ -331,7 +379,7 @@
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| -** The testcase() macro is used to aid in coverage testing.  When 
 | 
| +** The testcase() macro is used to aid in coverage testing.  When
 | 
|  ** doing coverage testing, the condition inside the argument to
 | 
|  ** testcase() must be evaluated both true and false in order to
 | 
|  ** get full branch coverage.  The testcase() macro is inserted
 | 
| @@ -377,7 +425,7 @@
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| -** The ALWAYS and NEVER macros surround boolean expressions which 
 | 
| +** The ALWAYS and NEVER macros surround boolean expressions which
 | 
|  ** are intended to always be true or false, respectively.  Such
 | 
|  ** expressions could be omitted from the code completely.  But they
 | 
|  ** are included in a few cases in order to enhance the resilience
 | 
| @@ -391,7 +439,7 @@
 | 
|  ** be true and false so that the unreachable code they specify will
 | 
|  ** not be counted as untested code.
 | 
|  */
 | 
| -#if defined(SQLITE_COVERAGE_TEST)
 | 
| +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST)
 | 
|  # define ALWAYS(X)      (1)
 | 
|  # define NEVER(X)       (0)
 | 
|  #elif !defined(NDEBUG)
 | 
| @@ -403,6 +451,21 @@
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| +** Some malloc failures are only possible if SQLITE_TEST_REALLOC_STRESS is
 | 
| +** defined.  We need to defend against those failures when testing with
 | 
| +** SQLITE_TEST_REALLOC_STRESS, but we don't want the unreachable branches
 | 
| +** during a normal build.  The following macro can be used to disable tests
 | 
| +** that are always false except when SQLITE_TEST_REALLOC_STRESS is set.
 | 
| +*/
 | 
| +#if defined(SQLITE_TEST_REALLOC_STRESS)
 | 
| +# define ONLY_IF_REALLOC_STRESS(X)  (X)
 | 
| +#elif !defined(NDEBUG)
 | 
| +# define ONLY_IF_REALLOC_STRESS(X)  ((X)?(assert(0),1):0)
 | 
| +#else
 | 
| +# define ONLY_IF_REALLOC_STRESS(X)  (0)
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
|  ** Declarations used for tracing the operating system interfaces.
 | 
|  */
 | 
|  #if defined(SQLITE_FORCE_OS_TRACE) || defined(SQLITE_TEST) || \
 | 
| @@ -429,6 +492,13 @@
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| +** SQLITE_ENABLE_EXPLAIN_COMMENTS is incompatible with SQLITE_OMIT_EXPLAIN
 | 
| +*/
 | 
| +#ifdef SQLITE_OMIT_EXPLAIN
 | 
| +# undef SQLITE_ENABLE_EXPLAIN_COMMENTS
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
|  ** Return true (non-zero) if the input is an integer that is too large
 | 
|  ** to fit in 32-bits.  This macro is used inside of various testcase()
 | 
|  ** macros to verify that we have tested SQLite for large-file support.
 | 
| @@ -454,6 +524,18 @@
 | 
|  #include <stddef.h>
 | 
|  
 | 
|  /*
 | 
| +** Use a macro to replace memcpy() if compiled with SQLITE_INLINE_MEMCPY.
 | 
| +** This allows better measurements of where memcpy() is used when running
 | 
| +** cachegrind.  But this macro version of memcpy() is very slow so it
 | 
| +** should not be used in production.  This is a performance measurement
 | 
| +** hack only.
 | 
| +*/
 | 
| +#ifdef SQLITE_INLINE_MEMCPY
 | 
| +# define memcpy(D,S,N) {char*xxd=(char*)(D);const char*xxs=(const char*)(S);\
 | 
| +                        int xxn=(N);while(xxn-->0)*(xxd++)=*(xxs++);}
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
|  ** If compiling for a processor that lacks floating point support,
 | 
|  ** substitute integer for floating-point
 | 
|  */
 | 
| @@ -475,7 +557,7 @@
 | 
|  
 | 
|  /*
 | 
|  ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
 | 
| -** afterward. Having this macro allows us to cause the C compiler 
 | 
| +** afterward. Having this macro allows us to cause the C compiler
 | 
|  ** to omit code used by TEMP tables without messy #ifndef statements.
 | 
|  */
 | 
|  #ifdef SQLITE_OMIT_TEMPDB
 | 
| @@ -514,7 +596,7 @@
 | 
|  
 | 
|  /*
 | 
|  ** If no value has been provided for SQLITE_MAX_WORKER_THREADS, or if
 | 
| -** SQLITE_TEMP_STORE is set to 3 (never use temporary files), set it 
 | 
| +** SQLITE_TEMP_STORE is set to 3 (never use temporary files), set it
 | 
|  ** to zero.
 | 
|  */
 | 
|  #if SQLITE_TEMP_STORE==3 || SQLITE_THREADSAFE==0
 | 
| @@ -537,9 +619,12 @@
 | 
|  ** pagecaches for each database connection.  A positive number is the
 | 
|  ** number of pages.  A negative number N translations means that a buffer
 | 
|  ** of -1024*N bytes is allocated and used for as many pages as it will hold.
 | 
| +**
 | 
| +** The default value of "20" was choosen to minimize the run-time of the
 | 
| +** speedtest1 test program with options: --shrink-memory --reprepare
 | 
|  */
 | 
|  #ifndef SQLITE_DEFAULT_PCACHE_INITSZ
 | 
| -# define SQLITE_DEFAULT_PCACHE_INITSZ 100
 | 
| +# define SQLITE_DEFAULT_PCACHE_INITSZ 20
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| @@ -553,8 +638,12 @@
 | 
|  /*
 | 
|  ** Macros to compute minimum and maximum of two numbers.
 | 
|  */
 | 
| -#define MIN(A,B) ((A)<(B)?(A):(B))
 | 
| -#define MAX(A,B) ((A)>(B)?(A):(B))
 | 
| +#ifndef MIN
 | 
| +# define MIN(A,B) ((A)<(B)?(A):(B))
 | 
| +#endif
 | 
| +#ifndef MAX
 | 
| +# define MAX(A,B) ((A)>(B)?(A):(B))
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** Swap two objects of type TYPE.
 | 
| @@ -662,7 +751,7 @@ typedef INT8_TYPE i8;              /* 1-byte signed integer */
 | 
|  **      4 -> 20           1000 -> 99        1048576 -> 200
 | 
|  **     10 -> 33           1024 -> 100    4294967296 -> 320
 | 
|  **
 | 
| -** The LogEst can be negative to indicate fractional values. 
 | 
| +** The LogEst can be negative to indicate fractional values.
 | 
|  ** Examples:
 | 
|  **
 | 
|  **    0.5 -> -10           0.1 -> -33        0.0625 -> -40
 | 
| @@ -683,38 +772,62 @@ typedef INT16_TYPE LogEst;
 | 
|  # endif
 | 
|  #endif
 | 
|  
 | 
| +/* The uptr type is an unsigned integer large enough to hold a pointer
 | 
| +*/
 | 
| +#if defined(HAVE_STDINT_H)
 | 
| +  typedef uintptr_t uptr;
 | 
| +#elif SQLITE_PTRSIZE==4
 | 
| +  typedef u32 uptr;
 | 
| +#else
 | 
| +  typedef u64 uptr;
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
| +** The SQLITE_WITHIN(P,S,E) macro checks to see if pointer P points to
 | 
| +** something between S (inclusive) and E (exclusive).
 | 
| +**
 | 
| +** In other words, S is a buffer and E is a pointer to the first byte after
 | 
| +** the end of buffer S.  This macro returns true if P points to something
 | 
| +** contained within the buffer S.
 | 
| +*/
 | 
| +#define SQLITE_WITHIN(P,S,E) (((uptr)(P)>=(uptr)(S))&&((uptr)(P)<(uptr)(E)))
 | 
| +
 | 
| +
 | 
|  /*
 | 
|  ** Macros to determine whether the machine is big or little endian,
 | 
|  ** and whether or not that determination is run-time or compile-time.
 | 
|  **
 | 
|  ** For best performance, an attempt is made to guess at the byte-order
 | 
|  ** using C-preprocessor macros.  If that is unsuccessful, or if
 | 
| -** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined
 | 
| +** -DSQLITE_BYTEORDER=0 is set, then byte-order is determined
 | 
|  ** at run-time.
 | 
|  */
 | 
| -#if (defined(i386)     || defined(__i386__)   || defined(_M_IX86) ||    \
 | 
| +#ifndef SQLITE_BYTEORDER
 | 
| +# if defined(i386)     || defined(__i386__)   || defined(_M_IX86) ||    \
 | 
|       defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)  ||    \
 | 
|       defined(_M_AMD64) || defined(_M_ARM)     || defined(__x86)   ||    \
 | 
| -     defined(__arm__)) && !defined(SQLITE_RUNTIME_BYTEORDER)
 | 
| -# define SQLITE_BYTEORDER    1234
 | 
| -# define SQLITE_BIGENDIAN    0
 | 
| -# define SQLITE_LITTLEENDIAN 1
 | 
| -# define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
 | 
| +     defined(__arm__)
 | 
| +#   define SQLITE_BYTEORDER    1234
 | 
| +# elif defined(sparc)    || defined(__ppc__)
 | 
| +#   define SQLITE_BYTEORDER    4321
 | 
| +# else
 | 
| +#   define SQLITE_BYTEORDER 0
 | 
| +# endif
 | 
|  #endif
 | 
| -#if (defined(sparc)    || defined(__ppc__))  \
 | 
| -    && !defined(SQLITE_RUNTIME_BYTEORDER)
 | 
| -# define SQLITE_BYTEORDER    4321
 | 
| +#if SQLITE_BYTEORDER==4321
 | 
|  # define SQLITE_BIGENDIAN    1
 | 
|  # define SQLITE_LITTLEENDIAN 0
 | 
|  # define SQLITE_UTF16NATIVE  SQLITE_UTF16BE
 | 
| -#endif
 | 
| -#if !defined(SQLITE_BYTEORDER)
 | 
| +#elif SQLITE_BYTEORDER==1234
 | 
| +# define SQLITE_BIGENDIAN    0
 | 
| +# define SQLITE_LITTLEENDIAN 1
 | 
| +# define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
 | 
| +#else
 | 
|  # ifdef SQLITE_AMALGAMATION
 | 
|    const int sqlite3one = 1;
 | 
|  # else
 | 
|    extern const int sqlite3one;
 | 
|  # endif
 | 
| -# define SQLITE_BYTEORDER    0     /* 0 means "unknown at compile-time" */
 | 
|  # define SQLITE_BIGENDIAN    (*(char *)(&sqlite3one)==0)
 | 
|  # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
 | 
|  # define SQLITE_UTF16NATIVE  (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
 | 
| @@ -728,7 +841,7 @@ typedef INT16_TYPE LogEst;
 | 
|  #define LARGEST_INT64  (0xffffffff|(((i64)0x7fffffff)<<32))
 | 
|  #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64)
 | 
|  
 | 
| -/* 
 | 
| +/*
 | 
|  ** Round up a number to the next larger multiple of 8.  This is used
 | 
|  ** to force 8-byte alignment on 64-bit architectures.
 | 
|  */
 | 
| @@ -767,10 +880,6 @@ typedef INT16_TYPE LogEst;
 | 
|  */
 | 
|  #ifdef __APPLE__
 | 
|  # include <TargetConditionals.h>
 | 
| -# if TARGET_OS_IPHONE
 | 
| -#   undef SQLITE_MAX_MMAP_SIZE
 | 
| -#   define SQLITE_MAX_MMAP_SIZE 0
 | 
| -# endif
 | 
|  #endif
 | 
|  #ifndef SQLITE_MAX_MMAP_SIZE
 | 
|  # if defined(__linux__) \
 | 
| @@ -826,7 +935,7 @@ typedef INT16_TYPE LogEst;
 | 
|  
 | 
|  /*
 | 
|  ** An instance of the following structure is used to store the busy-handler
 | 
| -** callback for a given sqlite handle. 
 | 
| +** callback for a given sqlite handle.
 | 
|  **
 | 
|  ** The sqlite.busyHandler member of the sqlite struct contains the busy
 | 
|  ** callback for the database handle. Each pager opened via the sqlite
 | 
| @@ -871,9 +980,9 @@ struct BusyHandler {
 | 
|  
 | 
|  /*
 | 
|  ** The following value as a destructor means to use sqlite3DbFree().
 | 
| -** The sqlite3DbFree() routine requires two parameters instead of the 
 | 
| -** one parameter that destructors normally want.  So we have to introduce 
 | 
| -** this magic value that the code knows to handle differently.  Any 
 | 
| +** The sqlite3DbFree() routine requires two parameters instead of the
 | 
| +** one parameter that destructors normally want.  So we have to introduce
 | 
| +** this magic value that the code knows to handle differently.  Any
 | 
|  ** pointer will work here as long as it is distinct from SQLITE_STATIC
 | 
|  ** and SQLITE_TRANSIENT.
 | 
|  */
 | 
| @@ -900,16 +1009,16 @@ struct BusyHandler {
 | 
|    int sqlite3_wsd_init(int N, int J);
 | 
|    void *sqlite3_wsd_find(void *K, int L);
 | 
|  #else
 | 
| -  #define SQLITE_WSD 
 | 
| +  #define SQLITE_WSD
 | 
|    #define GLOBAL(t,v) v
 | 
|    #define sqlite3GlobalConfig sqlite3Config
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
|  ** The following macros are used to suppress compiler warnings and to
 | 
| -** make it clear to human readers when a function parameter is deliberately 
 | 
| +** make it clear to human readers when a function parameter is deliberately
 | 
|  ** left unused within the body of a function. This usually happens when
 | 
| -** a function is called via a function pointer. For example the 
 | 
| +** a function is called via a function pointer. For example the
 | 
|  ** implementation of an SQL aggregate step callback may not use the
 | 
|  ** parameter indicating the number of arguments passed to the aggregate,
 | 
|  ** if it knows that this is enforced elsewhere.
 | 
| @@ -952,6 +1061,7 @@ typedef struct LookasideSlot LookasideSlot;
 | 
|  typedef struct Module Module;
 | 
|  typedef struct NameContext NameContext;
 | 
|  typedef struct Parse Parse;
 | 
| +typedef struct PreUpdate PreUpdate;
 | 
|  typedef struct PrintfArguments PrintfArguments;
 | 
|  typedef struct RowSet RowSet;
 | 
|  typedef struct Savepoint Savepoint;
 | 
| @@ -974,8 +1084,16 @@ typedef struct Walker Walker;
 | 
|  typedef struct WhereInfo WhereInfo;
 | 
|  typedef struct With With;
 | 
|  
 | 
| +/* A VList object records a mapping between parameters/variables/wildcards
 | 
| +** in the SQL statement (such as $abc, @pqr, or :xyz) and the integer
 | 
| +** variable number associated with that parameter.  See the format description
 | 
| +** on the sqlite3VListAdd() routine for more information.  A VList is really
 | 
| +** just an array of integers.
 | 
| +*/
 | 
| +typedef int VList;
 | 
| +
 | 
|  /*
 | 
| -** Defer sourcing vdbe.h and btree.h until after the "u8" and 
 | 
| +** Defer sourcing vdbe.h and btree.h until after the "u8" and
 | 
|  ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque
 | 
|  ** pointer types (i.e. FuncDef) defined above.
 | 
|  */
 | 
| @@ -983,10 +1101,39 @@ typedef struct With With;
 | 
|  #include "vdbe.h"
 | 
|  #include "pager.h"
 | 
|  #include "pcache.h"
 | 
| -
 | 
|  #include "os.h"
 | 
|  #include "mutex.h"
 | 
|  
 | 
| +/* The SQLITE_EXTRA_DURABLE compile-time option used to set the default
 | 
| +** synchronous setting to EXTRA.  It is no longer supported.
 | 
| +*/
 | 
| +#ifdef SQLITE_EXTRA_DURABLE
 | 
| +# warning Use SQLITE_DEFAULT_SYNCHRONOUS=3 instead of SQLITE_EXTRA_DURABLE
 | 
| +# define SQLITE_DEFAULT_SYNCHRONOUS 3
 | 
| +#endif
 | 
| +
 | 
| +/*
 | 
| +** Default synchronous levels.
 | 
| +**
 | 
| +** Note that (for historcal reasons) the PAGER_SYNCHRONOUS_* macros differ
 | 
| +** from the SQLITE_DEFAULT_SYNCHRONOUS value by 1.
 | 
| +**
 | 
| +**           PAGER_SYNCHRONOUS       DEFAULT_SYNCHRONOUS
 | 
| +**   OFF           1                         0
 | 
| +**   NORMAL        2                         1
 | 
| +**   FULL          3                         2
 | 
| +**   EXTRA         4                         3
 | 
| +**
 | 
| +** The "PRAGMA synchronous" statement also uses the zero-based numbers.
 | 
| +** In other words, the zero-based numbers are used for all external interfaces
 | 
| +** and the one-based values are used internally.
 | 
| +*/
 | 
| +#ifndef SQLITE_DEFAULT_SYNCHRONOUS
 | 
| +# define SQLITE_DEFAULT_SYNCHRONOUS (PAGER_SYNCHRONOUS_FULL-1)
 | 
| +#endif
 | 
| +#ifndef SQLITE_DEFAULT_WAL_SYNCHRONOUS
 | 
| +# define SQLITE_DEFAULT_WAL_SYNCHRONOUS SQLITE_DEFAULT_SYNCHRONOUS
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** Each database file to be accessed by the system is an instance
 | 
| @@ -996,9 +1143,10 @@ typedef struct With With;
 | 
|  ** databases may be attached.
 | 
|  */
 | 
|  struct Db {
 | 
| -  char *zName;         /* Name of this database */
 | 
| +  char *zDbSName;      /* Name of this database. (schema name, not filename) */
 | 
|    Btree *pBt;          /* The B*Tree structure for this database file */
 | 
|    u8 safety_level;     /* How aggressive at syncing data to disk */
 | 
| +  u8 bSyncSet;         /* True if "PRAGMA synchronous=N" has been run */
 | 
|    Schema *pSchema;     /* Pointer to database schema (possibly shared) */
 | 
|  };
 | 
|  
 | 
| @@ -1009,7 +1157,7 @@ struct Db {
 | 
|  ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing.
 | 
|  ** In shared cache mode, a single Schema object can be shared by multiple
 | 
|  ** Btrees that refer to the same underlying BtShared object.
 | 
| -** 
 | 
| +**
 | 
|  ** Schema objects are automatically deallocated when the last Btree that
 | 
|  ** references them is destroyed.   The TEMP Schema is manually freed by
 | 
|  ** sqlite3_close().
 | 
| @@ -1034,7 +1182,7 @@ struct Schema {
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| -** These macros can be used to test, set, or clear bits in the 
 | 
| +** These macros can be used to test, set, or clear bits in the
 | 
|  ** Db.pSchema->flags field.
 | 
|  */
 | 
|  #define DbHasProperty(D,I,P)     (((D)->aDb[I].pSchema->schemaFlags&(P))==(P))
 | 
| @@ -1083,8 +1231,8 @@ struct Schema {
 | 
|  ** lookaside allocations are not used to construct the schema objects.
 | 
|  */
 | 
|  struct Lookaside {
 | 
| +  u32 bDisable;           /* Only operate the lookaside when zero */
 | 
|    u16 sz;                 /* Size of each buffer in bytes */
 | 
| -  u8 bEnabled;            /* False to disable new lookaside allocations */
 | 
|    u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
 | 
|    int nOut;               /* Number of buffers currently checked out */
 | 
|    int mxOut;              /* Highwater mark for nOut */
 | 
| @@ -1098,13 +1246,15 @@ struct LookasideSlot {
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| -** A hash table for function definitions.
 | 
| +** A hash table for built-in function definitions.  (Application-defined
 | 
| +** functions use a regular table table from hash.h.)
 | 
|  **
 | 
|  ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots.
 | 
| -** Collisions are on the FuncDef.pHash chain.
 | 
| +** Collisions are on the FuncDef.u.pHash chain.
 | 
|  */
 | 
| +#define SQLITE_FUNC_HASH_SZ 23
 | 
|  struct FuncDefHash {
 | 
| -  FuncDef *a[23];       /* Hash table for functions */
 | 
| +  FuncDef *a[SQLITE_FUNC_HASH_SZ];       /* Hash table for functions */
 | 
|  };
 | 
|  
 | 
|  #ifdef SQLITE_USER_AUTHENTICATION
 | 
| @@ -1145,6 +1295,15 @@ void sqlite3CryptFunc(sqlite3_context*,int,sqlite3_value**);
 | 
|                                 const char*);
 | 
|  #endif
 | 
|  
 | 
| +#ifndef SQLITE_OMIT_DEPRECATED
 | 
| +/* This is an extra SQLITE_TRACE macro that indicates "legacy" tracing
 | 
| +** in the style of sqlite3_trace()
 | 
| +*/
 | 
| +#define SQLITE_TRACE_LEGACY  0x80
 | 
| +#else
 | 
| +#define SQLITE_TRACE_LEGACY  0
 | 
| +#endif /* SQLITE_OMIT_DEPRECATED */
 | 
| +
 | 
|  
 | 
|  /*
 | 
|  ** Each database connection is an instance of the following structure.
 | 
| @@ -1162,16 +1321,20 @@ struct sqlite3 {
 | 
|    unsigned int openFlags;       /* Flags passed to sqlite3_vfs.xOpen() */
 | 
|    int errCode;                  /* Most recent error code (SQLITE_*) */
 | 
|    int errMask;                  /* & result codes with this before returning */
 | 
| +  int iSysErrno;                /* Errno value from last system error */
 | 
|    u16 dbOptFlags;               /* Flags to enable/disable optimizations */
 | 
|    u8 enc;                       /* Text encoding */
 | 
|    u8 autoCommit;                /* The auto-commit flag. */
 | 
|    u8 temp_store;                /* 1: file 2: memory 0: default */
 | 
|    u8 mallocFailed;              /* True if we have seen a malloc failure */
 | 
| +  u8 bBenignMalloc;             /* Do not require OOMs if true */
 | 
|    u8 dfltLockMode;              /* Default locking-mode for attached dbs */
 | 
|    signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */
 | 
|    u8 suppressErr;               /* Do not issue error messages if true */
 | 
|    u8 vtabOnConflict;            /* Value to return for s3_vtab_on_conflict() */
 | 
|    u8 isTransactionSavepoint;    /* True if the outermost savepoint is a TS */
 | 
| +  u8 mTrace;                    /* zero or more SQLITE_TRACE flags */
 | 
| +  u8 skipBtreeMutex;            /* True if no shared-cache backends */
 | 
|    int nextPagesize;             /* Pagesize after VACUUM if >0 */
 | 
|    u32 magic;                    /* Magic number for detect library misuse */
 | 
|    int nChange;                  /* Value returned by sqlite3_changes() */
 | 
| @@ -1192,16 +1355,23 @@ struct sqlite3 {
 | 
|    int nVDestroy;                /* Number of active OP_VDestroy operations */
 | 
|    int nExtension;               /* Number of loaded extensions */
 | 
|    void **aExtension;            /* Array of shared library handles */
 | 
| -  void (*xTrace)(void*,const char*);        /* Trace function */
 | 
| +  int (*xTrace)(u32,void*,void*,void*);     /* Trace function */
 | 
|    void *pTraceArg;                          /* Argument to the trace function */
 | 
|    void (*xProfile)(void*,const char*,u64);  /* Profiling function */
 | 
|    void *pProfileArg;                        /* Argument to profile function */
 | 
| -  void *pCommitArg;                 /* Argument to xCommitCallback() */   
 | 
| +  void *pCommitArg;                 /* Argument to xCommitCallback() */
 | 
|    int (*xCommitCallback)(void*);    /* Invoked at every commit. */
 | 
| -  void *pRollbackArg;               /* Argument to xRollbackCallback() */   
 | 
| +  void *pRollbackArg;               /* Argument to xRollbackCallback() */
 | 
|    void (*xRollbackCallback)(void*); /* Invoked at every commit. */
 | 
|    void *pUpdateArg;
 | 
|    void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
 | 
| +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
 | 
| +  void *pPreUpdateArg;          /* First argument to xPreUpdateCallback */
 | 
| +  void (*xPreUpdateCallback)(   /* Registered using sqlite3_preupdate_hook() */
 | 
| +    void*,sqlite3*,int,char const*,char const*,sqlite3_int64,sqlite3_int64
 | 
| +  );
 | 
| +  PreUpdate *pPreUpdate;        /* Context for active pre-update callback */
 | 
| +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
 | 
|  #ifndef SQLITE_OMIT_WAL
 | 
|    int (*xWalCallback)(void *, sqlite3 *, const char *, int);
 | 
|    void *pWalArg;
 | 
| @@ -1231,7 +1401,7 @@ struct sqlite3 {
 | 
|    VTable **aVTrans;             /* Virtual tables with open transactions */
 | 
|    VTable *pDisconnect;    /* Disconnect these in next sqlite3_prepare() */
 | 
|  #endif
 | 
| -  FuncDefHash aFunc;            /* Hash table of connection functions */
 | 
| +  Hash aFunc;                   /* Hash table of connection functions */
 | 
|    Hash aCollSeq;                /* All collating sequences */
 | 
|    BusyHandler busyHandler;      /* Busy callback */
 | 
|    Db aDbStatic[2];              /* Static space for the 2 default backends */
 | 
| @@ -1243,8 +1413,8 @@ struct sqlite3 {
 | 
|    i64 nDeferredImmCons;         /* Net deferred immediate constraints */
 | 
|    int *pnBytesFreed;            /* If not NULL, increment this in DbFree() */
 | 
|  #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
 | 
| -  /* The following variables are all protected by the STATIC_MASTER 
 | 
| -  ** mutex, not by sqlite3.mutex. They are used by code in notify.c. 
 | 
| +  /* The following variables are all protected by the STATIC_MASTER
 | 
| +  ** mutex, not by sqlite3.mutex. They are used by code in notify.c.
 | 
|    **
 | 
|    ** When X.pUnlockConnection==Y, that means that X is waiting for Y to
 | 
|    ** unlock so that it can proceed.
 | 
| @@ -1272,13 +1442,18 @@ struct sqlite3 {
 | 
|  
 | 
|  /*
 | 
|  ** Possible values for the sqlite3.flags.
 | 
| +**
 | 
| +** Value constraints (enforced via assert()):
 | 
| +**      SQLITE_FullFSync     == PAGER_FULLFSYNC
 | 
| +**      SQLITE_CkptFullFSync == PAGER_CKPT_FULLFSYNC
 | 
| +**      SQLITE_CacheSpill    == PAGER_CACHE_SPILL
 | 
|  */
 | 
|  #define SQLITE_VdbeTrace      0x00000001  /* True to trace VDBE execution */
 | 
|  #define SQLITE_InternChanges  0x00000002  /* Uncommitted Hash table changes */
 | 
| -#define SQLITE_FullFSync      0x00000004  /* Use full fsync on the backend */
 | 
| -#define SQLITE_CkptFullFSync  0x00000008  /* Use full fsync for checkpoint */
 | 
| -#define SQLITE_CacheSpill     0x00000010  /* OK to spill pager cache */
 | 
| -#define SQLITE_FullColNames   0x00000020  /* Show full column names on SELECT */
 | 
| +#define SQLITE_FullColNames   0x00000004  /* Show full column names on SELECT */
 | 
| +#define SQLITE_FullFSync      0x00000008  /* Use full fsync on the backend */
 | 
| +#define SQLITE_CkptFullFSync  0x00000010  /* Use full fsync for checkpoint */
 | 
| +#define SQLITE_CacheSpill     0x00000020  /* OK to spill pager cache */
 | 
|  #define SQLITE_ShortColNames  0x00000040  /* Show short columns names */
 | 
|  #define SQLITE_CountRows      0x00000080  /* Count rows changed by INSERT, */
 | 
|                                            /*   DELETE, or UPDATE and return */
 | 
| @@ -1299,12 +1474,15 @@ struct sqlite3 {
 | 
|  #define SQLITE_AutoIndex      0x00100000  /* Enable automatic indexes */
 | 
|  #define SQLITE_PreferBuiltin  0x00200000  /* Preference to built-in funcs */
 | 
|  #define SQLITE_LoadExtension  0x00400000  /* Enable load_extension */
 | 
| -#define SQLITE_EnableTrigger  0x00800000  /* True to enable triggers */
 | 
| -#define SQLITE_DeferFKs       0x01000000  /* Defer all FK constraints */
 | 
| -#define SQLITE_QueryOnly      0x02000000  /* Disable database changes */
 | 
| -#define SQLITE_VdbeEQP        0x04000000  /* Debug EXPLAIN QUERY PLAN */
 | 
| -#define SQLITE_Vacuum         0x08000000  /* Currently in a VACUUM */
 | 
| -#define SQLITE_CellSizeCk     0x10000000  /* Check btree cell sizes on load */
 | 
| +#define SQLITE_LoadExtFunc    0x00800000  /* Enable load_extension() SQL func */
 | 
| +#define SQLITE_EnableTrigger  0x01000000  /* True to enable triggers */
 | 
| +#define SQLITE_DeferFKs       0x02000000  /* Defer all FK constraints */
 | 
| +#define SQLITE_QueryOnly      0x04000000  /* Disable database changes */
 | 
| +#define SQLITE_VdbeEQP        0x08000000  /* Debug EXPLAIN QUERY PLAN */
 | 
| +#define SQLITE_Vacuum         0x10000000  /* Currently in a VACUUM */
 | 
| +#define SQLITE_CellSizeCk     0x20000000  /* Check btree cell sizes on load */
 | 
| +#define SQLITE_Fts3Tokenizer  0x40000000  /* Enable fts3_tokenizer(2) */
 | 
| +#define SQLITE_NoCkptOnClose  0x80000000  /* No checkpoint on close()/DETACH */
 | 
|  
 | 
|  
 | 
|  /*
 | 
| @@ -1330,13 +1508,8 @@ struct sqlite3 {
 | 
|  /*
 | 
|  ** Macros for testing whether or not optimizations are enabled or disabled.
 | 
|  */
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
|  #define OptimizationDisabled(db, mask)  (((db)->dbOptFlags&(mask))!=0)
 | 
|  #define OptimizationEnabled(db, mask)   (((db)->dbOptFlags&(mask))==0)
 | 
| -#else
 | 
| -#define OptimizationDisabled(db, mask)  0
 | 
| -#define OptimizationEnabled(db, mask)   1
 | 
| -#endif
 | 
|  
 | 
|  /*
 | 
|  ** Return true if it OK to factor constant expressions into the initialization
 | 
| @@ -1358,28 +1531,33 @@ struct sqlite3 {
 | 
|  
 | 
|  /*
 | 
|  ** Each SQL function is defined by an instance of the following
 | 
| -** structure.  A pointer to this structure is stored in the sqlite.aFunc
 | 
| -** hash table.  When multiple functions have the same name, the hash table
 | 
| -** points to a linked list of these structures.
 | 
| +** structure.  For global built-in functions (ex: substr(), max(), count())
 | 
| +** a pointer to this structure is held in the sqlite3BuiltinFunctions object.
 | 
| +** For per-connection application-defined functions, a pointer to this
 | 
| +** structure is held in the db->aHash hash table.
 | 
| +**
 | 
| +** The u.pHash field is used by the global built-ins.  The u.pDestructor
 | 
| +** field is used by per-connection app-def functions.
 | 
|  */
 | 
|  struct FuncDef {
 | 
| -  i16 nArg;            /* Number of arguments.  -1 means unlimited */
 | 
| +  i8 nArg;             /* Number of arguments.  -1 means unlimited */
 | 
|    u16 funcFlags;       /* Some combination of SQLITE_FUNC_* */
 | 
|    void *pUserData;     /* User data parameter */
 | 
|    FuncDef *pNext;      /* Next function with same name */
 | 
| -  void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
 | 
| -  void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
 | 
| -  void (*xFinalize)(sqlite3_context*);                /* Aggregate finalizer */
 | 
| -  char *zName;         /* SQL name of the function. */
 | 
| -  FuncDef *pHash;      /* Next with a different name but the same hash */
 | 
| -  FuncDestructor *pDestructor;   /* Reference counted destructor function */
 | 
| +  void (*xSFunc)(sqlite3_context*,int,sqlite3_value**); /* func or agg-step */
 | 
| +  void (*xFinalize)(sqlite3_context*);                  /* Agg finalizer */
 | 
| +  const char *zName;   /* SQL name of the function. */
 | 
| +  union {
 | 
| +    FuncDef *pHash;      /* Next with a different name but the same hash */
 | 
| +    FuncDestructor *pDestructor;   /* Reference counted destructor function */
 | 
| +  } u;
 | 
|  };
 | 
|  
 | 
|  /*
 | 
|  ** This structure encapsulates a user-function destructor callback (as
 | 
|  ** configured using create_function_v2()) and a reference counter. When
 | 
|  ** create_function_v2() is called to create a function with a destructor,
 | 
| -** a single object of this type is allocated. FuncDestructor.nRef is set to 
 | 
| +** a single object of this type is allocated. FuncDestructor.nRef is set to
 | 
|  ** the number of FuncDef objects created (either 1 or 3, depending on whether
 | 
|  ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
 | 
|  ** member of each of the new FuncDef objects is set to point to the allocated
 | 
| @@ -1400,6 +1578,13 @@ struct FuncDestructor {
 | 
|  ** values must correspond to OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG.  And
 | 
|  ** SQLITE_FUNC_CONSTANT must be the same as SQLITE_DETERMINISTIC.  There
 | 
|  ** are assert() statements in the code to verify this.
 | 
| +**
 | 
| +** Value constraints (enforced via assert()):
 | 
| +**     SQLITE_FUNC_MINMAX    ==  NC_MinMaxAgg      == SF_MinMaxAgg
 | 
| +**     SQLITE_FUNC_LENGTH    ==  OPFLAG_LENGTHARG
 | 
| +**     SQLITE_FUNC_TYPEOF    ==  OPFLAG_TYPEOFARG
 | 
| +**     SQLITE_FUNC_CONSTANT  ==  SQLITE_DETERMINISTIC from the API
 | 
| +**     SQLITE_FUNC_ENCMASK   depends on SQLITE_UTF* macros in the API
 | 
|  */
 | 
|  #define SQLITE_FUNC_ENCMASK  0x0003 /* SQLITE_UTF8, SQLITE_UTF16BE or UTF16LE */
 | 
|  #define SQLITE_FUNC_LIKE     0x0004 /* Candidate for the LIKE optimization */
 | 
| @@ -1415,16 +1600,17 @@ struct FuncDestructor {
 | 
|  #define SQLITE_FUNC_MINMAX   0x1000 /* True for min() and max() aggregates */
 | 
|  #define SQLITE_FUNC_SLOCHNG  0x2000 /* "Slow Change". Value constant during a
 | 
|                                      ** single query - might change over time */
 | 
| +#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */
 | 
|  
 | 
|  /*
 | 
|  ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
 | 
|  ** used to create the initializers for the FuncDef structures.
 | 
|  **
 | 
|  **   FUNCTION(zName, nArg, iArg, bNC, xFunc)
 | 
| -**     Used to create a scalar function definition of a function zName 
 | 
| +**     Used to create a scalar function definition of a function zName
 | 
|  **     implemented by C function xFunc that accepts nArg arguments. The
 | 
|  **     value passed as iArg is cast to a (void*) and made available
 | 
| -**     as the user-data (sqlite3_user_data()) for the function. If 
 | 
| +**     as the user-data (sqlite3_user_data()) for the function. If
 | 
|  **     argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set.
 | 
|  **
 | 
|  **   VFUNCTION(zName, nArg, iArg, bNC, xFunc)
 | 
| @@ -1443,8 +1629,8 @@ struct FuncDestructor {
 | 
|  **     FUNCTION().
 | 
|  **
 | 
|  **   LIKEFUNC(zName, nArg, pArg, flags)
 | 
| -**     Used to create a scalar function definition of a function zName 
 | 
| -**     that accepts nArg arguments and is implemented by a call to C 
 | 
| +**     Used to create a scalar function definition of a function zName
 | 
| +**     that accepts nArg arguments and is implemented by a call to C
 | 
|  **     function likeFunc. Argument pArg is cast to a (void *) and made
 | 
|  **     available as the function user-data (sqlite3_user_data()). The
 | 
|  **     FuncDef.flags variable is set to the value passed as the flags
 | 
| @@ -1452,28 +1638,28 @@ struct FuncDestructor {
 | 
|  */
 | 
|  #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
 | 
|    {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \
 | 
| -   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
 | 
| +   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} }
 | 
|  #define VFUNCTION(zName, nArg, iArg, bNC, xFunc) \
 | 
|    {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \
 | 
| -   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
 | 
| +   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} }
 | 
|  #define DFUNCTION(zName, nArg, iArg, bNC, xFunc) \
 | 
|    {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \
 | 
| -   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
 | 
| +   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} }
 | 
|  #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \
 | 
|    {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\
 | 
| -   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
 | 
| +   SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} }
 | 
|  #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
 | 
|    {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \
 | 
| -   pArg, 0, xFunc, 0, 0, #zName, 0, 0}
 | 
| +   pArg, 0, xFunc, 0, #zName, }
 | 
|  #define LIKEFUNC(zName, nArg, arg, flags) \
 | 
|    {nArg, SQLITE_FUNC_CONSTANT|SQLITE_UTF8|flags, \
 | 
| -   (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
 | 
| +   (void *)arg, 0, likeFunc, 0, #zName, {0} }
 | 
|  #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
 | 
|    {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \
 | 
| -   SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
 | 
| +   SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}}
 | 
|  #define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \
 | 
|    {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \
 | 
| -   SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
 | 
| +   SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}}
 | 
|  
 | 
|  /*
 | 
|  ** All current savepoints are stored in a linked list starting at
 | 
| @@ -1515,10 +1701,8 @@ struct Module {
 | 
|  ** of this structure.
 | 
|  */
 | 
|  struct Column {
 | 
| -  char *zName;     /* Name of this column */
 | 
| +  char *zName;     /* Name of this column, \000, then the type */
 | 
|    Expr *pDflt;     /* Default value of this column */
 | 
| -  char *zDflt;     /* Original text of the default value */
 | 
| -  char *zType;     /* Data type for this column */
 | 
|    char *zColl;     /* Collating sequence.  If NULL, use the default */
 | 
|    u8 notNull;      /* An OE_ code for handling a NOT NULL constraint */
 | 
|    char affinity;   /* One of the SQLITE_AFF_... values */
 | 
| @@ -1530,6 +1714,7 @@ struct Column {
 | 
|  */
 | 
|  #define COLFLAG_PRIMKEY  0x0001    /* Column is part of the primary key */
 | 
|  #define COLFLAG_HIDDEN   0x0002    /* A hidden column in a virtual table */
 | 
| +#define COLFLAG_HASTYPE  0x0004    /* Type name follows column name */
 | 
|  
 | 
|  /*
 | 
|  ** A "Collating Sequence" is defined by an instance of the following
 | 
| @@ -1560,7 +1745,7 @@ struct CollSeq {
 | 
|  **
 | 
|  ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
 | 
|  ** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve
 | 
| -** the speed a little by numbering the values consecutively.  
 | 
| +** the speed a little by numbering the values consecutively.
 | 
|  **
 | 
|  ** But rather than start with 0 or 1, we begin with 'A'.  That way,
 | 
|  ** when multiple affinity types are concatenated into a string and
 | 
| @@ -1579,7 +1764,7 @@ struct CollSeq {
 | 
|  
 | 
|  /*
 | 
|  ** The SQLITE_AFF_MASK values masks off the significant bits of an
 | 
| -** affinity value. 
 | 
| +** affinity value.
 | 
|  */
 | 
|  #define SQLITE_AFF_MASK     0x47
 | 
|  
 | 
| @@ -1592,6 +1777,7 @@ struct CollSeq {
 | 
|  ** operator is NULL.  It is added to certain comparison operators to
 | 
|  ** prove that the operands are always NOT NULL.
 | 
|  */
 | 
| +#define SQLITE_KEEPNULL     0x08  /* Used by vector == or <> */
 | 
|  #define SQLITE_JUMPIFNULL   0x10  /* jumps if either operand is NULL */
 | 
|  #define SQLITE_STOREP2      0x20  /* Store result in reg[P2] rather than jump */
 | 
|  #define SQLITE_NULLEQ       0x80  /* NULL=NULL */
 | 
| @@ -1599,20 +1785,20 @@ struct CollSeq {
 | 
|  
 | 
|  /*
 | 
|  ** An object of this type is created for each virtual table present in
 | 
| -** the database schema. 
 | 
| +** the database schema.
 | 
|  **
 | 
|  ** If the database schema is shared, then there is one instance of this
 | 
|  ** structure for each database connection (sqlite3*) that uses the shared
 | 
|  ** schema. This is because each database connection requires its own unique
 | 
| -** instance of the sqlite3_vtab* handle used to access the virtual table 
 | 
| -** implementation. sqlite3_vtab* handles can not be shared between 
 | 
| -** database connections, even when the rest of the in-memory database 
 | 
| +** instance of the sqlite3_vtab* handle used to access the virtual table
 | 
| +** implementation. sqlite3_vtab* handles can not be shared between
 | 
| +** database connections, even when the rest of the in-memory database
 | 
|  ** schema is shared, as the implementation often stores the database
 | 
|  ** connection handle passed to it via the xConnect() or xCreate() method
 | 
|  ** during initialization internally. This database connection handle may
 | 
| -** then be used by the virtual table implementation to access real tables 
 | 
| -** within the database. So that they appear as part of the callers 
 | 
| -** transaction, these accesses need to be made via the same database 
 | 
| +** then be used by the virtual table implementation to access real tables
 | 
| +** within the database. So that they appear as part of the callers
 | 
| +** transaction, these accesses need to be made via the same database
 | 
|  ** connection as that used to execute SQL operations on the virtual table.
 | 
|  **
 | 
|  ** All VTable objects that correspond to a single table in a shared
 | 
| @@ -1624,19 +1810,19 @@ struct CollSeq {
 | 
|  ** sqlite3_vtab* handle in the compiled query.
 | 
|  **
 | 
|  ** When an in-memory Table object is deleted (for example when the
 | 
| -** schema is being reloaded for some reason), the VTable objects are not 
 | 
| -** deleted and the sqlite3_vtab* handles are not xDisconnect()ed 
 | 
| +** schema is being reloaded for some reason), the VTable objects are not
 | 
| +** deleted and the sqlite3_vtab* handles are not xDisconnect()ed
 | 
|  ** immediately. Instead, they are moved from the Table.pVTable list to
 | 
|  ** another linked list headed by the sqlite3.pDisconnect member of the
 | 
| -** corresponding sqlite3 structure. They are then deleted/xDisconnected 
 | 
| +** corresponding sqlite3 structure. They are then deleted/xDisconnected
 | 
|  ** next time a statement is prepared using said sqlite3*. This is done
 | 
|  ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes.
 | 
|  ** Refer to comments above function sqlite3VtabUnlockList() for an
 | 
|  ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect
 | 
|  ** list without holding the corresponding sqlite3.mutex mutex.
 | 
|  **
 | 
| -** The memory for objects of this type is always allocated by 
 | 
| -** sqlite3DbMalloc(), using the connection handle stored in VTable.db as 
 | 
| +** The memory for objects of this type is always allocated by
 | 
| +** sqlite3DbMalloc(), using the connection handle stored in VTable.db as
 | 
|  ** the first argument.
 | 
|  */
 | 
|  struct VTable {
 | 
| @@ -1663,9 +1849,9 @@ struct Table {
 | 
|    ExprList *pCheck;    /* All CHECK constraints */
 | 
|                         /*   ... also used as column name list in a VIEW */
 | 
|    int tnum;            /* Root BTree page for this table */
 | 
| +  u32 nTabRef;         /* Number of pointers to this Table */
 | 
|    i16 iPKey;           /* If not negative, use aCol[iPKey] as the rowid */
 | 
|    i16 nCol;            /* Number of columns in this table */
 | 
| -  u16 nRef;            /* Number of pointers to this Table */
 | 
|    LogEst nRowLogEst;   /* Estimated rows in table - from sqlite_stat1 table */
 | 
|    LogEst szTabRow;     /* Estimated size of each table row in bytes */
 | 
|  #ifdef SQLITE_ENABLE_COSTMULT
 | 
| @@ -1804,7 +1990,7 @@ struct FKey {
 | 
|  ** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the
 | 
|  ** referenced table row is propagated into the row that holds the
 | 
|  ** foreign key.
 | 
| -** 
 | 
| +**
 | 
|  ** The following symbolic values are used to record which type
 | 
|  ** of action to take.
 | 
|  */
 | 
| @@ -1825,7 +2011,7 @@ struct FKey {
 | 
|  
 | 
|  /*
 | 
|  ** An instance of the following structure is passed as the first
 | 
| -** argument to sqlite3VdbeKeyCompare and is used to control the 
 | 
| +** argument to sqlite3VdbeKeyCompare and is used to control the
 | 
|  ** comparison of the two index keys.
 | 
|  **
 | 
|  ** Note that aSortOrder[] and aColl[] have nField+1 slots.  There
 | 
| @@ -1866,7 +2052,7 @@ struct KeyInfo {
 | 
|  ** The key comparison functions actually return default_rc when they find
 | 
|  ** an equals comparison.  default_rc can be -1, 0, or +1.  If there are
 | 
|  ** multiple entries in the b-tree with the same key (when only looking
 | 
| -** at the first pKeyInfo->nFields,) then default_rc can be set to -1 to 
 | 
| +** at the first pKeyInfo->nFields,) then default_rc can be set to -1 to
 | 
|  ** cause the search to find the last match, or +1 to cause the search to
 | 
|  ** find the first match.
 | 
|  **
 | 
| @@ -1903,7 +2089,7 @@ struct UnpackedRecord {
 | 
|  ** In the Table structure describing Ex1, nCol==3 because there are
 | 
|  ** three columns in the table.  In the Index structure describing
 | 
|  ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
 | 
| -** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
 | 
| +** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the
 | 
|  ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
 | 
|  ** The second column to be indexed (c1) has an index of 0 in
 | 
|  ** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
 | 
| @@ -1911,7 +2097,7 @@ struct UnpackedRecord {
 | 
|  ** The Index.onError field determines whether or not the indexed columns
 | 
|  ** must be unique and what to do if they are not.  When Index.onError=OE_None,
 | 
|  ** it means this is not a unique index.  Otherwise it is a unique index
 | 
| -** and the value of Index.onError indicate the which conflict resolution 
 | 
| +** and the value of Index.onError indicate the which conflict resolution
 | 
|  ** algorithm to employ whenever an attempt is made to insert a non-unique
 | 
|  ** element.
 | 
|  **
 | 
| @@ -1976,7 +2162,7 @@ struct Index {
 | 
|  #define XN_EXPR      (-2)     /* Indexed column is an expression */
 | 
|  
 | 
|  /*
 | 
| -** Each sample stored in the sqlite_stat3 table is represented in memory 
 | 
| +** Each sample stored in the sqlite_stat3 table is represented in memory
 | 
|  ** using a structure of this type.  See documentation at the top of the
 | 
|  ** analyze.c source file for additional information.
 | 
|  */
 | 
| @@ -2071,9 +2257,9 @@ typedef int ynVar;
 | 
|  ** to represent the greater-than-or-equal-to operator in the expression
 | 
|  ** tree.
 | 
|  **
 | 
| -** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB, 
 | 
| +** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB,
 | 
|  ** or TK_STRING), then Expr.token contains the text of the SQL literal. If
 | 
| -** the expression is a variable (TK_VARIABLE), then Expr.token contains the 
 | 
| +** the expression is a variable (TK_VARIABLE), then Expr.token contains the
 | 
|  ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION),
 | 
|  ** then Expr.token contains the name of the function.
 | 
|  **
 | 
| @@ -2084,7 +2270,7 @@ typedef int ynVar;
 | 
|  ** a CASE expression or an IN expression of the form "<lhs> IN (<y>, <z>...)".
 | 
|  ** Expr.x.pSelect is used if the expression is a sub-select or an expression of
 | 
|  ** the form "<lhs> IN (SELECT ...)". If the EP_xIsSelect bit is set in the
 | 
| -** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is 
 | 
| +** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is
 | 
|  ** valid.
 | 
|  **
 | 
|  ** An expression of the form ID or ID.ID refers to a column in a table.
 | 
| @@ -2095,8 +2281,8 @@ typedef int ynVar;
 | 
|  ** value is also stored in the Expr.iAgg column in the aggregate so that
 | 
|  ** it can be accessed after all aggregates are computed.
 | 
|  **
 | 
| -** If the expression is an unbound variable marker (a question mark 
 | 
| -** character '?' in the original SQL) then the Expr.iTable holds the index 
 | 
| +** If the expression is an unbound variable marker (a question mark
 | 
| +** character '?' in the original SQL) then the Expr.iTable holds the index
 | 
|  ** number for that variable.
 | 
|  **
 | 
|  ** If the expression is a subquery then Expr.iColumn holds an integer
 | 
| @@ -2135,7 +2321,7 @@ struct Expr {
 | 
|  
 | 
|    /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no
 | 
|    ** space is allocated for the fields below this point. An attempt to
 | 
| -  ** access them will result in a segfault or malfunction. 
 | 
| +  ** access them will result in a segfault or malfunction.
 | 
|    *********************************************************************/
 | 
|  
 | 
|    Expr *pLeft;           /* Left subnode */
 | 
| @@ -2156,9 +2342,11 @@ struct Expr {
 | 
|    int iTable;            /* TK_COLUMN: cursor number of table holding column
 | 
|                           ** TK_REGISTER: register number
 | 
|                           ** TK_TRIGGER: 1 -> new, 0 -> old
 | 
| -                         ** EP_Unlikely:  134217728 times likelihood */
 | 
| +                         ** EP_Unlikely:  134217728 times likelihood
 | 
| +                         ** TK_SELECT: 1st register of result vector */
 | 
|    ynVar iColumn;         /* TK_COLUMN: column index.  -1 for rowid.
 | 
| -                         ** TK_VARIABLE: variable number (always >= 1). */
 | 
| +                         ** TK_VARIABLE: variable number (always >= 1).
 | 
| +                         ** TK_SELECT_COLUMN: column of the result vector */
 | 
|    i16 iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
 | 
|    i16 iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
 | 
|    u8 op2;                /* TK_REGISTER: original value of Expr.op
 | 
| @@ -2194,6 +2382,7 @@ struct Expr {
 | 
|  #define EP_CanBeNull 0x100000 /* Can be null despite NOT NULL constraint */
 | 
|  #define EP_Subquery  0x200000 /* Tree contains a TK_SELECT operator */
 | 
|  #define EP_Alias     0x400000 /* Is an alias for a result set column */
 | 
| +#define EP_Leaf      0x800000 /* Expr.pLeft, .pRight, .u.pSelect all NULL */
 | 
|  
 | 
|  /*
 | 
|  ** Combinations of two or more EP_* flags
 | 
| @@ -2201,7 +2390,7 @@ struct Expr {
 | 
|  #define EP_Propagate (EP_Collate|EP_Subquery) /* Propagate these bits up tree */
 | 
|  
 | 
|  /*
 | 
| -** These macros can be used to test, set, or clear bits in the 
 | 
| +** These macros can be used to test, set, or clear bits in the
 | 
|  ** Expr.flags field.
 | 
|  */
 | 
|  #define ExprHasProperty(E,P)     (((E)->flags&(P))!=0)
 | 
| @@ -2220,8 +2409,8 @@ struct Expr {
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| -** Macros to determine the number of bytes required by a normal Expr 
 | 
| -** struct, an Expr struct with the EP_Reduced flag set in Expr.flags 
 | 
| +** Macros to determine the number of bytes required by a normal Expr
 | 
| +** struct, an Expr struct with the EP_Reduced flag set in Expr.flags
 | 
|  ** and an Expr struct with the EP_TokenOnly flag set.
 | 
|  */
 | 
|  #define EXPR_FULLSIZE           sizeof(Expr)           /* Full size */
 | 
| @@ -2229,7 +2418,7 @@ struct Expr {
 | 
|  #define EXPR_TOKENONLYSIZE      offsetof(Expr,pLeft)   /* Fewer features */
 | 
|  
 | 
|  /*
 | 
| -** Flags passed to the sqlite3ExprDup() function. See the header comment 
 | 
| +** Flags passed to the sqlite3ExprDup() function. See the header comment
 | 
|  ** above sqlite3ExprDup() for details.
 | 
|  */
 | 
|  #define EXPRDUP_REDUCE         0x0001  /* Used reduced-size Expr nodes */
 | 
| @@ -2311,7 +2500,11 @@ struct IdList {
 | 
|  ** tables in a join to 32 instead of 64.  But it also reduces the size
 | 
|  ** of the library by 738 bytes on ix86.
 | 
|  */
 | 
| -typedef u64 Bitmask;
 | 
| +#ifdef SQLITE_BITMASK_TYPE
 | 
| +  typedef SQLITE_BITMASK_TYPE Bitmask;
 | 
| +#else
 | 
| +  typedef u64 Bitmask;
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** The number of bits in a Bitmask.  "BMS" means "BitMask Size".
 | 
| @@ -2323,6 +2516,7 @@ typedef u64 Bitmask;
 | 
|  */
 | 
|  #define MASKBIT(n)   (((Bitmask)1)<<(n))
 | 
|  #define MASKBIT32(n) (((unsigned int)1)<<(n))
 | 
| +#define ALLBITS      ((Bitmask)-1)
 | 
|  
 | 
|  /*
 | 
|  ** The following structure describes the FROM clause of a SELECT statement.
 | 
| @@ -2357,7 +2551,7 @@ struct SrcList {
 | 
|      int regReturn;    /* Register holding return address of addrFillSub */
 | 
|      int regResult;    /* Registers holding results of a co-routine */
 | 
|      struct {
 | 
| -      u8 jointype;      /* Type of join between this able and the previous */
 | 
| +      u8 jointype;      /* Type of join between this table and the previous */
 | 
|        unsigned notIndexed :1;    /* True if there is a NOT INDEXED clause */
 | 
|        unsigned isIndexedBy :1;   /* True if there is an INDEXED BY clause */
 | 
|        unsigned isTabFunc :1;     /* True if table-valued-function syntax */
 | 
| @@ -2395,22 +2589,28 @@ struct SrcList {
 | 
|  /*
 | 
|  ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin()
 | 
|  ** and the WhereInfo.wctrlFlags member.
 | 
| +**
 | 
| +** Value constraints (enforced via assert()):
 | 
| +**     WHERE_USE_LIMIT  == SF_FixedLimit
 | 
|  */
 | 
|  #define WHERE_ORDERBY_NORMAL   0x0000 /* No-op */
 | 
|  #define WHERE_ORDERBY_MIN      0x0001 /* ORDER BY processing for min() func */
 | 
|  #define WHERE_ORDERBY_MAX      0x0002 /* ORDER BY processing for max() func */
 | 
|  #define WHERE_ONEPASS_DESIRED  0x0004 /* Want to do one-pass UPDATE/DELETE */
 | 
| -#define WHERE_DUPLICATES_OK    0x0008 /* Ok to return a row more than once */
 | 
| -#define WHERE_OMIT_OPEN_CLOSE  0x0010 /* Table cursors are already open */
 | 
| -#define WHERE_FORCE_TABLE      0x0020 /* Do not use an index-only search */
 | 
| -#define WHERE_ONETABLE_ONLY    0x0040 /* Only code the 1st table in pTabList */
 | 
| -#define WHERE_NO_AUTOINDEX     0x0080 /* Disallow automatic indexes */
 | 
| -#define WHERE_GROUPBY          0x0100 /* pOrderBy is really a GROUP BY */
 | 
| -#define WHERE_DISTINCTBY       0x0200 /* pOrderby is really a DISTINCT clause */
 | 
| -#define WHERE_WANT_DISTINCT    0x0400 /* All output needs to be distinct */
 | 
| -#define WHERE_SORTBYGROUP      0x0800 /* Support sqlite3WhereIsSorted() */
 | 
| -#define WHERE_REOPEN_IDX       0x1000 /* Try to use OP_ReopenIdx */
 | 
| -#define WHERE_ONEPASS_MULTIROW 0x2000 /* ONEPASS is ok with multiple rows */
 | 
| +#define WHERE_ONEPASS_MULTIROW 0x0008 /* ONEPASS is ok with multiple rows */
 | 
| +#define WHERE_DUPLICATES_OK    0x0010 /* Ok to return a row more than once */
 | 
| +#define WHERE_OR_SUBCLAUSE     0x0020 /* Processing a sub-WHERE as part of
 | 
| +                                      ** the OR optimization  */
 | 
| +#define WHERE_GROUPBY          0x0040 /* pOrderBy is really a GROUP BY */
 | 
| +#define WHERE_DISTINCTBY       0x0080 /* pOrderby is really a DISTINCT clause */
 | 
| +#define WHERE_WANT_DISTINCT    0x0100 /* All output needs to be distinct */
 | 
| +#define WHERE_SORTBYGROUP      0x0200 /* Support sqlite3WhereIsSorted() */
 | 
| +#define WHERE_SEEK_TABLE       0x0400 /* Do not defer seeks on main table */
 | 
| +#define WHERE_ORDERBY_LIMIT    0x0800 /* ORDERBY+LIMIT on the inner loop */
 | 
| +#define WHERE_SEEK_UNIQ_TABLE  0x1000 /* Do not defer seeks if unique */
 | 
| +                        /*     0x2000    not currently used */
 | 
| +#define WHERE_USE_LIMIT        0x4000 /* Use the LIMIT in cost estimates */
 | 
| +                        /*     0x8000    not currently used */
 | 
|  
 | 
|  /* Allowed return values from sqlite3WhereIsDistinct()
 | 
|  */
 | 
| @@ -2428,12 +2628,12 @@ struct SrcList {
 | 
|  ** pEList corresponds to the result set of a SELECT and is NULL for
 | 
|  ** other statements.
 | 
|  **
 | 
| -** NameContexts can be nested.  When resolving names, the inner-most 
 | 
| +** NameContexts can be nested.  When resolving names, the inner-most
 | 
|  ** context is searched first.  If no match is found, the next outer
 | 
|  ** context is checked.  If there is still no match, the next context
 | 
|  ** is checked.  This process continues until either a match is found
 | 
|  ** or all contexts are check.  When a match is found, the nRef member of
 | 
| -** the context containing the match is incremented. 
 | 
| +** the context containing the match is incremented.
 | 
|  **
 | 
|  ** Each subquery gets a new NameContext.  The pNext field points to the
 | 
|  ** NameContext in the parent query.  Thus the process of scanning the
 | 
| @@ -2454,16 +2654,18 @@ struct NameContext {
 | 
|  /*
 | 
|  ** Allowed values for the NameContext, ncFlags field.
 | 
|  **
 | 
| -** Note:  NC_MinMaxAgg must have the same value as SF_MinMaxAgg and
 | 
| -** SQLITE_FUNC_MINMAX.
 | 
| -** 
 | 
| +** Value constraints (all checked via assert()):
 | 
| +**    NC_HasAgg    == SF_HasAgg
 | 
| +**    NC_MinMaxAgg == SF_MinMaxAgg == SQLITE_FUNC_MINMAX
 | 
| +**
 | 
|  */
 | 
|  #define NC_AllowAgg  0x0001  /* Aggregate functions are allowed here */
 | 
| -#define NC_HasAgg    0x0002  /* One or more aggregate functions seen */
 | 
| +#define NC_PartIdx   0x0002  /* True if resolving a partial index WHERE */
 | 
|  #define NC_IsCheck   0x0004  /* True if resolving names in a CHECK constraint */
 | 
|  #define NC_InAggFunc 0x0008  /* True if analyzing arguments to an agg func */
 | 
| -#define NC_PartIdx   0x0010  /* True if resolving a partial index WHERE */
 | 
| +#define NC_HasAgg    0x0010  /* One or more aggregate functions seen */
 | 
|  #define NC_IdxExpr   0x0020  /* True if resolving columns of CREATE INDEX */
 | 
| +#define NC_VarSelect 0x0040  /* A correlated subquery has been seen */
 | 
|  #define NC_MinMaxAgg 0x1000  /* min/max aggregates seen.  See note above */
 | 
|  
 | 
|  /*
 | 
| @@ -2489,13 +2691,13 @@ struct NameContext {
 | 
|  struct Select {
 | 
|    ExprList *pEList;      /* The fields of the result */
 | 
|    u8 op;                 /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
 | 
| -  u16 selFlags;          /* Various SF_* values */
 | 
| +  LogEst nSelectRow;     /* Estimated number of result rows */
 | 
| +  u32 selFlags;          /* Various SF_* values */
 | 
|    int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
 | 
|  #if SELECTTRACE_ENABLED
 | 
|    char zSelName[12];     /* Symbolic name of this SELECT use for debugging */
 | 
|  #endif
 | 
|    int addrOpenEphm[2];   /* OP_OpenEphem opcodes related to this select */
 | 
| -  u64 nSelectRow;        /* Estimated number of result rows */
 | 
|    SrcList *pSrc;         /* The FROM clause */
 | 
|    Expr *pWhere;          /* The WHERE clause */
 | 
|    ExprList *pGroupBy;    /* The GROUP BY clause */
 | 
| @@ -2511,23 +2713,30 @@ struct Select {
 | 
|  /*
 | 
|  ** Allowed values for Select.selFlags.  The "SF" prefix stands for
 | 
|  ** "Select Flag".
 | 
| -*/
 | 
| -#define SF_Distinct        0x0001  /* Output should be DISTINCT */
 | 
| -#define SF_All             0x0002  /* Includes the ALL keyword */
 | 
| -#define SF_Resolved        0x0004  /* Identifiers have been resolved */
 | 
| -#define SF_Aggregate       0x0008  /* Contains aggregate functions */
 | 
| -#define SF_UsesEphemeral   0x0010  /* Uses the OpenEphemeral opcode */
 | 
| -#define SF_Expanded        0x0020  /* sqlite3SelectExpand() called on this */
 | 
| -#define SF_HasTypeInfo     0x0040  /* FROM subqueries have Table metadata */
 | 
| -#define SF_Compound        0x0080  /* Part of a compound query */
 | 
| -#define SF_Values          0x0100  /* Synthesized from VALUES clause */
 | 
| -#define SF_MultiValue      0x0200  /* Single VALUES term with multiple rows */
 | 
| -#define SF_NestedFrom      0x0400  /* Part of a parenthesized FROM clause */
 | 
| -#define SF_MaybeConvert    0x0800  /* Need convertCompoundSelectToSubquery() */
 | 
| -#define SF_MinMaxAgg       0x1000  /* Aggregate containing min() or max() */
 | 
| -#define SF_Recursive       0x2000  /* The recursive part of a recursive CTE */
 | 
| -#define SF_Converted       0x4000  /* By convertCompoundSelectToSubquery() */
 | 
| -#define SF_IncludeHidden   0x8000  /* Include hidden columns in output */
 | 
| +**
 | 
| +** Value constraints (all checked via assert())
 | 
| +**     SF_HasAgg     == NC_HasAgg
 | 
| +**     SF_MinMaxAgg  == NC_MinMaxAgg     == SQLITE_FUNC_MINMAX
 | 
| +**     SF_FixedLimit == WHERE_USE_LIMIT
 | 
| +*/
 | 
| +#define SF_Distinct       0x00001  /* Output should be DISTINCT */
 | 
| +#define SF_All            0x00002  /* Includes the ALL keyword */
 | 
| +#define SF_Resolved       0x00004  /* Identifiers have been resolved */
 | 
| +#define SF_Aggregate      0x00008  /* Contains agg functions or a GROUP BY */
 | 
| +#define SF_HasAgg         0x00010  /* Contains aggregate functions */
 | 
| +#define SF_UsesEphemeral  0x00020  /* Uses the OpenEphemeral opcode */
 | 
| +#define SF_Expanded       0x00040  /* sqlite3SelectExpand() called on this */
 | 
| +#define SF_HasTypeInfo    0x00080  /* FROM subqueries have Table metadata */
 | 
| +#define SF_Compound       0x00100  /* Part of a compound query */
 | 
| +#define SF_Values         0x00200  /* Synthesized from VALUES clause */
 | 
| +#define SF_MultiValue     0x00400  /* Single VALUES term with multiple rows */
 | 
| +#define SF_NestedFrom     0x00800  /* Part of a parenthesized FROM clause */
 | 
| +#define SF_MinMaxAgg      0x01000  /* Aggregate containing min() or max() */
 | 
| +#define SF_Recursive      0x02000  /* The recursive part of a recursive CTE */
 | 
| +#define SF_FixedLimit     0x04000  /* nSelectRow set by a constant LIMIT */
 | 
| +#define SF_MaybeConvert   0x08000  /* Need convertCompoundSelectToSubquery() */
 | 
| +#define SF_Converted      0x10000  /* By convertCompoundSelectToSubquery() */
 | 
| +#define SF_IncludeHidden  0x20000  /* Include hidden columns in output */
 | 
|  
 | 
|  
 | 
|  /*
 | 
| @@ -2535,7 +2744,7 @@ struct Select {
 | 
|  ** by one of the following macros.  The "SRT" prefix means "SELECT Result
 | 
|  ** Type".
 | 
|  **
 | 
| -**     SRT_Union       Store results as a key in a temporary index 
 | 
| +**     SRT_Union       Store results as a key in a temporary index
 | 
|  **                     identified by pDest->iSDParm.
 | 
|  **
 | 
|  **     SRT_Except      Remove results from the temporary index pDest->iSDParm.
 | 
| @@ -2559,7 +2768,7 @@ struct Select {
 | 
|  **                     of the query.  This destination implies "LIMIT 1".
 | 
|  **
 | 
|  **     SRT_Set         The result must be a single column.  Store each
 | 
| -**                     row of result as the key in table pDest->iSDParm. 
 | 
| +**                     row of result as the key in table pDest->iSDParm.
 | 
|  **                     Apply the affinity pDest->affSdst before storing
 | 
|  **                     results.  Used to implement "IN (SELECT ...)".
 | 
|  **
 | 
| @@ -2619,7 +2828,7 @@ struct Select {
 | 
|  */
 | 
|  struct SelectDest {
 | 
|    u8 eDest;            /* How to dispose of the results.  On of SRT_* above. */
 | 
| -  char affSdst;        /* Affinity used when eDest==SRT_Set */
 | 
| +  char *zAffSdst;      /* Affinity used when eDest==SRT_Set */
 | 
|    int iSDParm;         /* A parameter used by the eDest disposal method */
 | 
|    int iSdst;           /* Base register where results are written */
 | 
|    int nSdst;           /* Number of registers allocated */
 | 
| @@ -2627,11 +2836,11 @@ struct SelectDest {
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| -** During code generation of statements that do inserts into AUTOINCREMENT 
 | 
| +** During code generation of statements that do inserts into AUTOINCREMENT
 | 
|  ** tables, the following information is attached to the Table.u.autoInc.p
 | 
|  ** pointer of each autoincrement table to record some side information that
 | 
|  ** the code generator needs.  We have to keep per-table autoincrement
 | 
| -** information in case inserts are down within triggers.  Triggers do not
 | 
| +** information in case inserts are done within triggers.  Triggers do not
 | 
|  ** normally coordinate their activities, but we do need to coordinate the
 | 
|  ** loading and saving of autoincrement information.
 | 
|  */
 | 
| @@ -2650,7 +2859,7 @@ struct AutoincInfo {
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
| -** At least one instance of the following structure is created for each 
 | 
| +** At least one instance of the following structure is created for each
 | 
|  ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE
 | 
|  ** statement. All such objects are stored in the linked list headed at
 | 
|  ** Parse.pTriggerPrg and deleted once statement compilation has been
 | 
| @@ -2663,7 +2872,7 @@ struct AutoincInfo {
 | 
|  ** values for both pTrigger and orconf.
 | 
|  **
 | 
|  ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns
 | 
| -** accessed (or set to 0 for triggers fired as a result of INSERT 
 | 
| +** accessed (or set to 0 for triggers fired as a result of INSERT
 | 
|  ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to
 | 
|  ** a mask of new.* columns used by the program.
 | 
|  */
 | 
| @@ -2704,7 +2913,7 @@ struct TriggerPrg {
 | 
|  ** is constant but the second part is reset at the beginning and end of
 | 
|  ** each recursion.
 | 
|  **
 | 
| -** The nTableLock and aTableLock variables are only used if the shared-cache 
 | 
| +** The nTableLock and aTableLock variables are only used if the shared-cache
 | 
|  ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
 | 
|  ** used to store the set of table-locks required by the statement being
 | 
|  ** compiled. Function sqlite3TableLock() is used to add entries to the
 | 
| @@ -2723,36 +2932,25 @@ struct Parse {
 | 
|    u8 mayAbort;         /* True if statement may throw an ABORT exception */
 | 
|    u8 hasCompound;      /* Need to invoke convertCompoundSelectToSubquery() */
 | 
|    u8 okConstFactor;    /* OK to factor out constants */
 | 
| -  int aTempReg[8];     /* Holding area for temporary registers */
 | 
| +  u8 disableLookaside; /* Number of times lookaside has been disabled */
 | 
| +  u8 nColCache;        /* Number of entries in aColCache[] */
 | 
|    int nRangeReg;       /* Size of the temporary register block */
 | 
|    int iRangeReg;       /* First register in temporary register block */
 | 
|    int nErr;            /* Number of errors seen */
 | 
|    int nTab;            /* Number of previously allocated VDBE cursors */
 | 
|    int nMem;            /* Number of memory cells used so far */
 | 
| -  int nSet;            /* Number of sets used so far */
 | 
| -  int nOnce;           /* Number of OP_Once instructions so far */
 | 
|    int nOpAlloc;        /* Number of slots allocated for Vdbe.aOp[] */
 | 
|    int szOpAlloc;       /* Bytes of memory space allocated for Vdbe.aOp[] */
 | 
| -  int iFixedOp;        /* Never back out opcodes iFixedOp-1 or earlier */
 | 
|    int ckBase;          /* Base register of data during check constraints */
 | 
|    int iSelfTab;        /* Table of an index whose exprs are being coded */
 | 
|    int iCacheLevel;     /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
 | 
|    int iCacheCnt;       /* Counter used to generate aColCache[].lru values */
 | 
|    int nLabel;          /* Number of labels used */
 | 
|    int *aLabel;         /* Space to hold the labels */
 | 
| -  struct yColCache {
 | 
| -    int iTable;           /* Table cursor number */
 | 
| -    i16 iColumn;          /* Table column number */
 | 
| -    u8 tempReg;           /* iReg is a temp register that needs to be freed */
 | 
| -    int iLevel;           /* Nesting level */
 | 
| -    int iReg;             /* Reg with value of this column. 0 means none. */
 | 
| -    int lru;              /* Least recently used entry has the smallest value */
 | 
| -  } aColCache[SQLITE_N_COLCACHE];  /* One for each column cache entry */
 | 
|    ExprList *pConstExpr;/* Constant expressions */
 | 
|    Token constraintName;/* Name of the constraint currently being parsed */
 | 
|    yDbMask writeMask;   /* Start a write transaction on these databases */
 | 
|    yDbMask cookieMask;  /* Bitmask of schema verified databases */
 | 
| -  int cookieValue[SQLITE_MAX_ATTACHED+2];  /* Values of cookies to verify */
 | 
|    int regRowid;        /* Register holding rowid of CREATE TABLE entry */
 | 
|    int regRoot;         /* Register holding root page number for new objects */
 | 
|    int nMaxArg;         /* Max args passed to user function by sub-program */
 | 
| @@ -2765,8 +2963,6 @@ struct Parse {
 | 
|    TableLock *aTableLock; /* Required table locks for shared-cache mode */
 | 
|  #endif
 | 
|    AutoincInfo *pAinc;  /* Information about AUTOINCREMENT counters */
 | 
| -
 | 
| -  /* Information used while coding trigger programs. */
 | 
|    Parse *pToplevel;    /* Parse structure for main program (or NULL) */
 | 
|    Table *pTriggerTab;  /* Table triggers are being coded for */
 | 
|    int addrCrTab;       /* Address of OP_CreateTable opcode on CREATE TABLE */
 | 
| @@ -2777,35 +2973,50 @@ struct Parse {
 | 
|    u8 eOrconf;          /* Default ON CONFLICT policy for trigger steps */
 | 
|    u8 disableTriggers;  /* True to disable triggers */
 | 
|  
 | 
| +  /**************************************************************************
 | 
| +  ** Fields above must be initialized to zero.  The fields that follow,
 | 
| +  ** down to the beginning of the recursive section, do not need to be
 | 
| +  ** initialized as they will be set before being used.  The boundary is
 | 
| +  ** determined by offsetof(Parse,aColCache).
 | 
| +  **************************************************************************/
 | 
| +
 | 
| +  struct yColCache {
 | 
| +    int iTable;           /* Table cursor number */
 | 
| +    i16 iColumn;          /* Table column number */
 | 
| +    u8 tempReg;           /* iReg is a temp register that needs to be freed */
 | 
| +    int iLevel;           /* Nesting level */
 | 
| +    int iReg;             /* Reg with value of this column. 0 means none. */
 | 
| +    int lru;              /* Least recently used entry has the smallest value */
 | 
| +  } aColCache[SQLITE_N_COLCACHE];  /* One for each column cache entry */
 | 
| +  int aTempReg[8];        /* Holding area for temporary registers */
 | 
| +  Token sNameToken;       /* Token with unqualified schema object name */
 | 
| +
 | 
|    /************************************************************************
 | 
|    ** Above is constant between recursions.  Below is reset before and after
 | 
|    ** each recursion.  The boundary between these two regions is determined
 | 
| -  ** using offsetof(Parse,nVar) so the nVar field must be the first field
 | 
| -  ** in the recursive region.
 | 
| +  ** using offsetof(Parse,sLastToken) so the sLastToken field must be the
 | 
| +  ** first field in the recursive region.
 | 
|    ************************************************************************/
 | 
|  
 | 
| -  int nVar;                 /* Number of '?' variables seen in the SQL so far */
 | 
| -  int nzVar;                /* Number of available slots in azVar[] */
 | 
| +  Token sLastToken;       /* The last token parsed */
 | 
| +  ynVar nVar;               /* Number of '?' variables seen in the SQL so far */
 | 
|    u8 iPkSortOrder;          /* ASC or DESC for INTEGER PRIMARY KEY */
 | 
|    u8 explain;               /* True if the EXPLAIN flag is found on the query */
 | 
|  #ifndef SQLITE_OMIT_VIRTUALTABLE
 | 
|    u8 declareVtab;           /* True if inside sqlite3_declare_vtab() */
 | 
|    int nVtabLock;            /* Number of virtual tables to lock */
 | 
|  #endif
 | 
| -  int nAlias;               /* Number of aliased result set columns */
 | 
|    int nHeight;              /* Expression tree height of current sub-select */
 | 
|  #ifndef SQLITE_OMIT_EXPLAIN
 | 
|    int iSelectId;            /* ID of current select for EXPLAIN output */
 | 
|    int iNextSelectId;        /* Next available select ID for EXPLAIN output */
 | 
|  #endif
 | 
| -  char **azVar;             /* Pointers to names of parameters */
 | 
| +  VList *pVList;            /* Mapping between variable names and numbers */
 | 
|    Vdbe *pReprepare;         /* VM being reprepared (sqlite3Reprepare()) */
 | 
|    const char *zTail;        /* All SQL text past the last semicolon parsed */
 | 
|    Table *pNewTable;         /* A table being constructed by CREATE TABLE */
 | 
|    Trigger *pNewTrigger;     /* Trigger under construct by a CREATE TRIGGER */
 | 
|    const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
 | 
| -  Token sNameToken;         /* Token with unqualified schema object name */
 | 
| -  Token sLastToken;         /* The last token parsed */
 | 
|  #ifndef SQLITE_OMIT_VIRTUALTABLE
 | 
|    Token sArg;               /* Complete text of a module argument */
 | 
|    Table **apVtabLock;       /* Pointer to virtual tables needing locking */
 | 
| @@ -2817,6 +3028,14 @@ struct Parse {
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| +** Sizes and pointers of various parts of the Parse object.
 | 
| +*/
 | 
| +#define PARSE_HDR_SZ offsetof(Parse,aColCache) /* Recursive part w/o aColCache*/
 | 
| +#define PARSE_RECURSE_SZ offsetof(Parse,sLastToken)    /* Recursive part */
 | 
| +#define PARSE_TAIL_SZ (sizeof(Parse)-PARSE_RECURSE_SZ) /* Non-recursive part */
 | 
| +#define PARSE_TAIL(X) (((char*)(X))+PARSE_RECURSE_SZ)  /* Pointer to tail */
 | 
| +
 | 
| +/*
 | 
|  ** Return true if currently inside an sqlite3_declare_vtab() call.
 | 
|  */
 | 
|  #ifdef SQLITE_OMIT_VIRTUALTABLE
 | 
| @@ -2836,27 +3055,40 @@ struct AuthContext {
 | 
|  
 | 
|  /*
 | 
|  ** Bitfield flags for P5 value in various opcodes.
 | 
| -*/
 | 
| -#define OPFLAG_NCHANGE       0x01    /* Set to update db->nChange */
 | 
| +**
 | 
| +** Value constraints (enforced via assert()):
 | 
| +**    OPFLAG_LENGTHARG    == SQLITE_FUNC_LENGTH
 | 
| +**    OPFLAG_TYPEOFARG    == SQLITE_FUNC_TYPEOF
 | 
| +**    OPFLAG_BULKCSR      == BTREE_BULKLOAD
 | 
| +**    OPFLAG_SEEKEQ       == BTREE_SEEK_EQ
 | 
| +**    OPFLAG_FORDELETE    == BTREE_FORDELETE
 | 
| +**    OPFLAG_SAVEPOSITION == BTREE_SAVEPOSITION
 | 
| +**    OPFLAG_AUXDELETE    == BTREE_AUXDELETE
 | 
| +*/
 | 
| +#define OPFLAG_NCHANGE       0x01    /* OP_Insert: Set to update db->nChange */
 | 
| +                                     /* Also used in P2 (not P5) of OP_Delete */
 | 
|  #define OPFLAG_EPHEM         0x01    /* OP_Column: Ephemeral output is ok */
 | 
| -#define OPFLAG_LASTROWID     0x02    /* Set to update db->lastRowid */
 | 
| +#define OPFLAG_LASTROWID     0x20    /* Set to update db->lastRowid */
 | 
|  #define OPFLAG_ISUPDATE      0x04    /* This OP_Insert is an sql UPDATE */
 | 
|  #define OPFLAG_APPEND        0x08    /* This is likely to be an append */
 | 
|  #define OPFLAG_USESEEKRESULT 0x10    /* Try to avoid a seek in BtreeInsert() */
 | 
| +#define OPFLAG_ISNOOP        0x40    /* OP_Delete does pre-update-hook only */
 | 
|  #define OPFLAG_LENGTHARG     0x40    /* OP_Column only used for length() */
 | 
|  #define OPFLAG_TYPEOFARG     0x80    /* OP_Column only used for typeof() */
 | 
|  #define OPFLAG_BULKCSR       0x01    /* OP_Open** used to open bulk cursor */
 | 
|  #define OPFLAG_SEEKEQ        0x02    /* OP_Open** cursor uses EQ seek only */
 | 
| -#define OPFLAG_FORDELETE     0x08    /* OP_Open is opening for-delete csr */
 | 
| +#define OPFLAG_FORDELETE     0x08    /* OP_Open should use BTREE_FORDELETE */
 | 
|  #define OPFLAG_P2ISREG       0x10    /* P2 to OP_Open** is a register number */
 | 
|  #define OPFLAG_PERMUTE       0x01    /* OP_Compare: use the permutation */
 | 
| +#define OPFLAG_SAVEPOSITION  0x02    /* OP_Delete/Insert: save cursor pos */
 | 
| +#define OPFLAG_AUXDELETE     0x04    /* OP_Delete: index in a DELETE op */
 | 
|  
 | 
|  /*
 | 
|   * Each trigger present in the database schema is stored as an instance of
 | 
| - * struct Trigger. 
 | 
| + * struct Trigger.
 | 
|   *
 | 
|   * Pointers to instances of struct Trigger are stored in two ways.
 | 
| - * 1. In the "trigHash" hash table (part of the sqlite3* that represents the 
 | 
| + * 1. In the "trigHash" hash table (part of the sqlite3* that represents the
 | 
|   *    database). This allows Trigger structures to be retrieved by name.
 | 
|   * 2. All triggers associated with a single table form a linked list, using the
 | 
|   *    pNext member of struct Trigger. A pointer to the first element of the
 | 
| @@ -2882,7 +3114,7 @@ struct Trigger {
 | 
|  
 | 
|  /*
 | 
|  ** A trigger is either a BEFORE or an AFTER trigger.  The following constants
 | 
| -** determine which. 
 | 
| +** determine which.
 | 
|  **
 | 
|  ** If there are multiple triggers, you might of some BEFORE and some AFTER.
 | 
|  ** In that cases, the constants below can be ORed together.
 | 
| @@ -2892,15 +3124,15 @@ struct Trigger {
 | 
|  
 | 
|  /*
 | 
|   * An instance of struct TriggerStep is used to store a single SQL statement
 | 
| - * that is a part of a trigger-program. 
 | 
| + * that is a part of a trigger-program.
 | 
|   *
 | 
|   * Instances of struct TriggerStep are stored in a singly linked list (linked
 | 
| - * using the "pNext" member) referenced by the "step_list" member of the 
 | 
| + * using the "pNext" member) referenced by the "step_list" member of the
 | 
|   * associated struct Trigger instance. The first element of the linked list is
 | 
|   * the first step of the trigger-program.
 | 
| - * 
 | 
| + *
 | 
|   * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
 | 
| - * "SELECT" statement. The meanings of the other members is determined by the 
 | 
| + * "SELECT" statement. The meanings of the other members is determined by the
 | 
|   * value of "op" as follows:
 | 
|   *
 | 
|   * (op == TK_INSERT)
 | 
| @@ -2910,7 +3142,7 @@ struct Trigger {
 | 
|   * zTarget   -> Dequoted name of the table to insert into.
 | 
|   * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
 | 
|   *              this stores values to be inserted. Otherwise NULL.
 | 
| - * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ... 
 | 
| + * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ...
 | 
|   *              statement, then this stores the column-names to be
 | 
|   *              inserted into.
 | 
|   *
 | 
| @@ -2918,7 +3150,7 @@ struct Trigger {
 | 
|   * zTarget   -> Dequoted name of the table to delete from.
 | 
|   * pWhere    -> The WHERE clause of the DELETE statement if one is specified.
 | 
|   *              Otherwise NULL.
 | 
| - * 
 | 
| + *
 | 
|   * (op == TK_UPDATE)
 | 
|   * zTarget   -> Dequoted name of the table to update.
 | 
|   * pWhere    -> The WHERE clause of the UPDATE statement if one is specified.
 | 
| @@ -2926,7 +3158,7 @@ struct Trigger {
 | 
|   * pExprList -> A list of the columns to update and the expressions to update
 | 
|   *              them to. See sqlite3Update() documentation of "pChanges"
 | 
|   *              argument.
 | 
| - * 
 | 
| + *
 | 
|   */
 | 
|  struct TriggerStep {
 | 
|    u8 op;               /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
 | 
| @@ -2944,7 +3176,7 @@ struct TriggerStep {
 | 
|  /*
 | 
|  ** The following structure contains information used by the sqliteFix...
 | 
|  ** routines as they walk the parse tree to make database references
 | 
| -** explicit.  
 | 
| +** explicit.
 | 
|  */
 | 
|  typedef struct DbFixer DbFixer;
 | 
|  struct DbFixer {
 | 
| @@ -2968,10 +3200,16 @@ struct StrAccum {
 | 
|    u32  nAlloc;         /* Amount of space allocated in zText */
 | 
|    u32  mxAlloc;        /* Maximum allowed allocation.  0 for no malloc usage */
 | 
|    u8   accError;       /* STRACCUM_NOMEM or STRACCUM_TOOBIG */
 | 
| -  u8   bMalloced;      /* zText points to allocated space */
 | 
| +  u8   printfFlags;    /* SQLITE_PRINTF flags below */
 | 
|  };
 | 
|  #define STRACCUM_NOMEM   1
 | 
|  #define STRACCUM_TOOBIG  2
 | 
| +#define SQLITE_PRINTF_INTERNAL 0x01  /* Internal-use-only converters allowed */
 | 
| +#define SQLITE_PRINTF_SQLFUNC  0x02  /* SQL function arguments to VXPrintf */
 | 
| +#define SQLITE_PRINTF_MALLOCED 0x04  /* True if xText is allocated space */
 | 
| +
 | 
| +#define isMalloced(X)  (((X)->printfFlags & SQLITE_PRINTF_MALLOCED)!=0)
 | 
| +
 | 
|  
 | 
|  /*
 | 
|  ** A pointer to this structure is used to communicate information
 | 
| @@ -2999,6 +3237,7 @@ struct Sqlite3Config {
 | 
|    int neverCorrupt;                 /* Database is always well-formed */
 | 
|    int szLookaside;                  /* Default lookaside buffer size */
 | 
|    int nLookaside;                   /* Default lookaside buffer count */
 | 
| +  int nStmtSpill;                   /* Stmt-journal spill-to-disk threshold */
 | 
|    sqlite3_mem_methods m;            /* Low-level memory allocation interface */
 | 
|    sqlite3_mutex_methods mutex;      /* Low-level mutex interface */
 | 
|    sqlite3_pcache_methods2 pcache2;  /* Low-level page-cache interface */
 | 
| @@ -3038,10 +3277,11 @@ struct Sqlite3Config {
 | 
|    void (*xVdbeBranch)(void*,int iSrcLine,u8 eThis,u8 eMx);  /* Callback */
 | 
|    void *pVdbeBranchArg;                                     /* 1st argument */
 | 
|  #endif
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifndef SQLITE_UNTESTABLE
 | 
|    int (*xTestCallback)(int);        /* Invoked by sqlite3FaultSim() */
 | 
|  #endif
 | 
|    int bLocaltimeFault;              /* True to fail localtime() calls */
 | 
| +  int iOnceResetThreshold;          /* When to reset OP_Once counters */
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| @@ -3066,10 +3306,10 @@ struct Sqlite3Config {
 | 
|  ** Context pointer passed down through the tree-walk.
 | 
|  */
 | 
|  struct Walker {
 | 
| +  Parse *pParse;                            /* Parser context.  */
 | 
|    int (*xExprCallback)(Walker*, Expr*);     /* Callback for expressions */
 | 
|    int (*xSelectCallback)(Walker*,Select*);  /* Callback for SELECTs */
 | 
|    void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
 | 
| -  Parse *pParse;                            /* Parser context.  */
 | 
|    int walkerDepth;                          /* Number of subqueries */
 | 
|    u8 eCode;                                 /* A small processing code */
 | 
|    union {                                   /* Extra data for callback */
 | 
| @@ -3079,6 +3319,8 @@ struct Walker {
 | 
|      SrcList *pSrcList;                         /* FROM clause */
 | 
|      struct SrcCount *pSrcCount;                /* Counting column references */
 | 
|      struct CCurHint *pCCurHint;                /* Used by codeCursorHint() */
 | 
| +    int *aiCol;                                /* array of column indexes */
 | 
| +    struct IdxCover *pIdxCover;                /* Check for index coverage */
 | 
|    } u;
 | 
|  };
 | 
|  
 | 
| @@ -3147,7 +3389,23 @@ int sqlite3CantopenError(int);
 | 
|  #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
 | 
|  #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
 | 
|  #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
 | 
| +#ifdef SQLITE_DEBUG
 | 
| +  int sqlite3NomemError(int);
 | 
| +  int sqlite3IoerrnomemError(int);
 | 
| +# define SQLITE_NOMEM_BKPT sqlite3NomemError(__LINE__)
 | 
| +# define SQLITE_IOERR_NOMEM_BKPT sqlite3IoerrnomemError(__LINE__)
 | 
| +#else
 | 
| +# define SQLITE_NOMEM_BKPT SQLITE_NOMEM
 | 
| +# define SQLITE_IOERR_NOMEM_BKPT SQLITE_IOERR_NOMEM
 | 
| +#endif
 | 
|  
 | 
| +/*
 | 
| +** FTS3 and FTS4 both require virtual table support
 | 
| +*/
 | 
| +#if defined(SQLITE_OMIT_VIRTUALTABLE)
 | 
| +# undef SQLITE_ENABLE_FTS3
 | 
| +# undef SQLITE_ENABLE_FTS4
 | 
| +#endif
 | 
|  
 | 
|  /*
 | 
|  ** FTS4 is really an extension for FTS3.  It is enabled using the
 | 
| @@ -3180,6 +3438,7 @@ int sqlite3CantopenError(int);
 | 
|  # define sqlite3Isdigit(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x04)
 | 
|  # define sqlite3Isxdigit(x)  (sqlite3CtypeMap[(unsigned char)(x)]&0x08)
 | 
|  # define sqlite3Tolower(x)   (sqlite3UpperToLower[(unsigned char)(x)])
 | 
| +# define sqlite3Isquote(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x80)
 | 
|  #else
 | 
|  # define sqlite3Toupper(x)   toupper((unsigned char)(x))
 | 
|  # define sqlite3Isspace(x)   isspace((unsigned char)(x))
 | 
| @@ -3188,6 +3447,7 @@ int sqlite3CantopenError(int);
 | 
|  # define sqlite3Isdigit(x)   isdigit((unsigned char)(x))
 | 
|  # define sqlite3Isxdigit(x)  isxdigit((unsigned char)(x))
 | 
|  # define sqlite3Tolower(x)   tolower((unsigned char)(x))
 | 
| +# define sqlite3Isquote(x)   ((x)=='"'||(x)=='\''||(x)=='['||(x)=='`')
 | 
|  #endif
 | 
|  #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
 | 
|  int sqlite3IsIdChar(u8);
 | 
| @@ -3196,8 +3456,9 @@ int sqlite3IsIdChar(u8);
 | 
|  /*
 | 
|  ** Internal function prototypes
 | 
|  */
 | 
| -#define sqlite3StrICmp sqlite3_stricmp
 | 
| +int sqlite3StrICmp(const char*,const char*);
 | 
|  int sqlite3Strlen30(const char*);
 | 
| +char *sqlite3ColumnType(Column*,char*);
 | 
|  #define sqlite3StrNICmp sqlite3_strnicmp
 | 
|  
 | 
|  int sqlite3MallocInit(void);
 | 
| @@ -3206,6 +3467,7 @@ void *sqlite3Malloc(u64);
 | 
|  void *sqlite3MallocZero(u64);
 | 
|  void *sqlite3DbMallocZero(sqlite3*, u64);
 | 
|  void *sqlite3DbMallocRaw(sqlite3*, u64);
 | 
| +void *sqlite3DbMallocRawNN(sqlite3*, u64);
 | 
|  char *sqlite3DbStrDup(sqlite3*,const char*);
 | 
|  char *sqlite3DbStrNDup(sqlite3*,const char*, u64);
 | 
|  void *sqlite3Realloc(void*, u64);
 | 
| @@ -3219,7 +3481,7 @@ void sqlite3ScratchFree(void*);
 | 
|  void *sqlite3PageMalloc(int);
 | 
|  void sqlite3PageFree(void*);
 | 
|  void sqlite3MemSetDefault(void);
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifndef SQLITE_UNTESTABLE
 | 
|  void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
 | 
|  #endif
 | 
|  int sqlite3HeapNearlyFull(void);
 | 
| @@ -3235,18 +3497,22 @@ int sqlite3HeapNearlyFull(void);
 | 
|  #ifdef SQLITE_USE_ALLOCA
 | 
|  # define sqlite3StackAllocRaw(D,N)   alloca(N)
 | 
|  # define sqlite3StackAllocZero(D,N)  memset(alloca(N), 0, N)
 | 
| -# define sqlite3StackFree(D,P)       
 | 
| +# define sqlite3StackFree(D,P)
 | 
|  #else
 | 
|  # define sqlite3StackAllocRaw(D,N)   sqlite3DbMallocRaw(D,N)
 | 
|  # define sqlite3StackAllocZero(D,N)  sqlite3DbMallocZero(D,N)
 | 
|  # define sqlite3StackFree(D,P)       sqlite3DbFree(D,P)
 | 
|  #endif
 | 
|  
 | 
| -#ifdef SQLITE_ENABLE_MEMSYS3
 | 
| -const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
 | 
| -#endif
 | 
| +/* Do not allow both MEMSYS5 and MEMSYS3 to be defined together.  If they
 | 
| +** are, disable MEMSYS3
 | 
| +*/
 | 
|  #ifdef SQLITE_ENABLE_MEMSYS5
 | 
|  const sqlite3_mem_methods *sqlite3MemGetMemsys5(void);
 | 
| +#undef SQLITE_ENABLE_MEMSYS3
 | 
| +#endif
 | 
| +#ifdef SQLITE_ENABLE_MEMSYS3
 | 
| +const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
 | 
|  #endif
 | 
|  
 | 
|  
 | 
| @@ -3288,10 +3554,8 @@ struct PrintfArguments {
 | 
|    sqlite3_value **apArg;   /* The argument values */
 | 
|  };
 | 
|  
 | 
| -#define SQLITE_PRINTF_INTERNAL 0x01
 | 
| -#define SQLITE_PRINTF_SQLFUNC  0x02
 | 
| -void sqlite3VXPrintf(StrAccum*, u32, const char*, va_list);
 | 
| -void sqlite3XPrintf(StrAccum*, u32, const char*, ...);
 | 
| +void sqlite3VXPrintf(StrAccum*, const char*, va_list);
 | 
| +void sqlite3XPrintf(StrAccum*, const char*, ...);
 | 
|  char *sqlite3MPrintf(sqlite3*,const char*, ...);
 | 
|  char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
 | 
|  #if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE)
 | 
| @@ -3303,6 +3567,7 @@ char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
 | 
|  
 | 
|  #if defined(SQLITE_DEBUG)
 | 
|    void sqlite3TreeViewExpr(TreeView*, const Expr*, u8);
 | 
| +  void sqlite3TreeViewBareExprList(TreeView*, const ExprList*, const char*);
 | 
|    void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*);
 | 
|    void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
 | 
|    void sqlite3TreeViewWith(TreeView*, const With*, u8);
 | 
| @@ -3311,7 +3576,8 @@ char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
 | 
|  
 | 
|  void sqlite3SetString(char **, sqlite3*, const char*);
 | 
|  void sqlite3ErrorMsg(Parse*, const char*, ...);
 | 
| -int sqlite3Dequote(char*);
 | 
| +void sqlite3Dequote(char*);
 | 
| +void sqlite3TokenInit(Token*,char*);
 | 
|  int sqlite3KeywordCode(const unsigned char*, int);
 | 
|  int sqlite3RunParser(Parse*, const char*, char **);
 | 
|  void sqlite3FinishCoding(Parse*);
 | 
| @@ -3320,15 +3586,20 @@ void sqlite3ReleaseTempReg(Parse*,int);
 | 
|  int sqlite3GetTempRange(Parse*,int);
 | 
|  void sqlite3ReleaseTempRange(Parse*,int,int);
 | 
|  void sqlite3ClearTempRegCache(Parse*);
 | 
| +#ifdef SQLITE_DEBUG
 | 
| +int sqlite3NoTempsInRange(Parse*,int,int);
 | 
| +#endif
 | 
|  Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
 | 
|  Expr *sqlite3Expr(sqlite3*,int,const char*);
 | 
|  void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
 | 
| -Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
 | 
| +Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*);
 | 
| +void sqlite3PExprAddSelect(Parse*, Expr*, Select*);
 | 
|  Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
 | 
|  Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
 | 
| -void sqlite3ExprAssignVarNumber(Parse*, Expr*);
 | 
| +void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
 | 
|  void sqlite3ExprDelete(sqlite3*, Expr*);
 | 
|  ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
 | 
| +ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
 | 
|  void sqlite3ExprListSetSortOrder(ExprList*,int);
 | 
|  void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
 | 
|  void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
 | 
| @@ -3337,13 +3608,16 @@ u32 sqlite3ExprListFlags(const ExprList*);
 | 
|  int sqlite3Init(sqlite3*, char**);
 | 
|  int sqlite3InitCallback(void*, int, char**, char**);
 | 
|  void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
 | 
| +#ifndef SQLITE_OMIT_VIRTUALTABLE
 | 
| +Module *sqlite3PragmaVtabRegister(sqlite3*,const char *zName);
 | 
| +#endif
 | 
|  void sqlite3ResetAllSchemasOfConnection(sqlite3*);
 | 
|  void sqlite3ResetOneSchema(sqlite3*,int);
 | 
|  void sqlite3CollapseDatabaseArray(sqlite3*);
 | 
| -void sqlite3BeginParse(Parse*,int);
 | 
|  void sqlite3CommitInternalChanges(sqlite3*);
 | 
|  void sqlite3DeleteColumnNames(sqlite3*,Table*);
 | 
|  int sqlite3ColumnsFromExprList(Parse*,ExprList*,i16*,Column**);
 | 
| +void sqlite3SelectAddColumnTypeAndCollation(Parse*,Table*,Select*);
 | 
|  Table *sqlite3ResultSetOfSelect(Parse*,Select*);
 | 
|  void sqlite3OpenMasterTable(Parse *, int);
 | 
|  Index *sqlite3PrimaryKeyIndex(Table*);
 | 
| @@ -3354,20 +3628,18 @@ void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
 | 
|  #else
 | 
|  # define sqlite3ColumnPropertiesFromName(T,C) /* no-op */
 | 
|  #endif
 | 
| -void sqlite3AddColumn(Parse*,Token*);
 | 
| +void sqlite3AddColumn(Parse*,Token*,Token*);
 | 
|  void sqlite3AddNotNull(Parse*, int);
 | 
|  void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
 | 
|  void sqlite3AddCheckConstraint(Parse*, Expr*);
 | 
| -void sqlite3AddColumnType(Parse*,Token*);
 | 
|  void sqlite3AddDefaultValue(Parse*,ExprSpan*);
 | 
|  void sqlite3AddCollateType(Parse*, Token*);
 | 
|  void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*);
 | 
|  int sqlite3ParseUri(const char*,const char*,unsigned int*,
 | 
|                      sqlite3_vfs**,char**,char **);
 | 
|  Btree *sqlite3DbNameToBtree(sqlite3*,const char*);
 | 
| -int sqlite3CodeOnce(Parse *);
 | 
|  
 | 
| -#ifdef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifdef SQLITE_UNTESTABLE
 | 
|  # define sqlite3FaultSim(X) SQLITE_OK
 | 
|  #else
 | 
|    int sqlite3FaultSim(int);
 | 
| @@ -3380,7 +3652,7 @@ int sqlite3BitvecSet(Bitvec*, u32);
 | 
|  void sqlite3BitvecClear(Bitvec*, u32, void*);
 | 
|  void sqlite3BitvecDestroy(Bitvec*);
 | 
|  u32 sqlite3BitvecSize(Bitvec*);
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifndef SQLITE_UNTESTABLE
 | 
|  int sqlite3BitvecBuiltinTest(int,int*);
 | 
|  #endif
 | 
|  
 | 
| @@ -3427,12 +3699,12 @@ void sqlite3SrcListAssignCursors(Parse*, SrcList*);
 | 
|  void sqlite3IdListDelete(sqlite3*, IdList*);
 | 
|  void sqlite3SrcListDelete(sqlite3*, SrcList*);
 | 
|  Index *sqlite3AllocateIndexObject(sqlite3*,i16,int,char**);
 | 
| -Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
 | 
| -                          Expr*, int, int);
 | 
| +void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
 | 
| +                          Expr*, int, int, u8);
 | 
|  void sqlite3DropIndex(Parse*, SrcList*, int);
 | 
|  int sqlite3Select(Parse*, Select*, SelectDest*);
 | 
|  Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
 | 
| -                         Expr*,ExprList*,u16,Expr*,Expr*);
 | 
| +                         Expr*,ExprList*,u32,Expr*,Expr*);
 | 
|  void sqlite3SelectDelete(sqlite3*, Select*);
 | 
|  Table *sqlite3SrcListLookup(Parse*, SrcList*);
 | 
|  int sqlite3IsReadOnly(Parse*, Table*, int);
 | 
| @@ -3444,9 +3716,10 @@ void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
 | 
|  void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
 | 
|  WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
 | 
|  void sqlite3WhereEnd(WhereInfo*);
 | 
| -u64 sqlite3WhereOutputRowCount(WhereInfo*);
 | 
| +LogEst sqlite3WhereOutputRowCount(WhereInfo*);
 | 
|  int sqlite3WhereIsDistinct(WhereInfo*);
 | 
|  int sqlite3WhereIsOrdered(WhereInfo*);
 | 
| +int sqlite3WhereOrderedInnerLoop(WhereInfo*);
 | 
|  int sqlite3WhereIsSorted(WhereInfo*);
 | 
|  int sqlite3WhereContinueLabel(WhereInfo*);
 | 
|  int sqlite3WhereBreakLabel(WhereInfo*);
 | 
| @@ -3468,7 +3741,7 @@ void sqlite3ExprCacheAffinityChange(Parse*, int, int);
 | 
|  void sqlite3ExprCode(Parse*, Expr*, int);
 | 
|  void sqlite3ExprCodeCopy(Parse*, Expr*, int);
 | 
|  void sqlite3ExprCodeFactorable(Parse*, Expr*, int);
 | 
| -void sqlite3ExprCodeAtInit(Parse*, Expr*, int, u8);
 | 
| +int sqlite3ExprCodeAtInit(Parse*, Expr*, int);
 | 
|  int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
 | 
|  int sqlite3ExprCodeTarget(Parse*, Expr*, int);
 | 
|  void sqlite3ExprCodeAndCache(Parse*, Expr*, int);
 | 
| @@ -3476,26 +3749,30 @@ int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int, u8);
 | 
|  #define SQLITE_ECEL_DUP      0x01  /* Deep, not shallow copies */
 | 
|  #define SQLITE_ECEL_FACTOR   0x02  /* Factor out constant terms */
 | 
|  #define SQLITE_ECEL_REF      0x04  /* Use ExprList.u.x.iOrderByCol */
 | 
| +#define SQLITE_ECEL_OMITREF  0x08  /* Omit if ExprList.u.x.iOrderByCol */
 | 
|  void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
 | 
|  void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
 | 
|  void sqlite3ExprIfFalseDup(Parse*, Expr*, int, int);
 | 
|  Table *sqlite3FindTable(sqlite3*,const char*, const char*);
 | 
| -Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*);
 | 
| -Table *sqlite3LocateTableItem(Parse*,int isView,struct SrcList_item *);
 | 
| +#define LOCATE_VIEW    0x01
 | 
| +#define LOCATE_NOERR   0x02
 | 
| +Table *sqlite3LocateTable(Parse*,u32 flags,const char*, const char*);
 | 
| +Table *sqlite3LocateTableItem(Parse*,u32 flags,struct SrcList_item *);
 | 
|  Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
 | 
|  void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
 | 
|  void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
 | 
| -void sqlite3Vacuum(Parse*);
 | 
| -int sqlite3RunVacuum(char**, sqlite3*);
 | 
| +void sqlite3Vacuum(Parse*,Token*);
 | 
| +int sqlite3RunVacuum(char**, sqlite3*, int);
 | 
|  char *sqlite3NameFromToken(sqlite3*, Token*);
 | 
|  int sqlite3ExprCompare(Expr*, Expr*, int);
 | 
|  int sqlite3ExprListCompare(ExprList*, ExprList*, int);
 | 
|  int sqlite3ExprImpliesExpr(Expr*, Expr*, int);
 | 
|  void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
 | 
|  void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
 | 
| +int sqlite3ExprCoveredByIndex(Expr*, int iCur, Index *pIdx);
 | 
|  int sqlite3FunctionUsesThisSrc(Expr*, SrcList*);
 | 
|  Vdbe *sqlite3GetVdbe(Parse*);
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifndef SQLITE_UNTESTABLE
 | 
|  void sqlite3PrngSaveState(void);
 | 
|  void sqlite3PrngRestoreState(void);
 | 
|  #endif
 | 
| @@ -3525,7 +3802,12 @@ void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int, int*, int);
 | 
|  int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int, int*,Index*,int);
 | 
|  void sqlite3ResolvePartIdxLabel(Parse*,int);
 | 
|  void sqlite3GenerateConstraintChecks(Parse*,Table*,int*,int,int,int,int,
 | 
| -                                     u8,u8,int,int*);
 | 
| +                                     u8,u8,int,int*,int*);
 | 
| +#ifdef SQLITE_ENABLE_NULL_TRIM
 | 
| +  void sqlite3SetMakeRecordP5(Vdbe*,Table*);
 | 
| +#else
 | 
| +# define sqlite3SetMakeRecordP5(A,B)
 | 
| +#endif
 | 
|  void sqlite3CompleteInsertion(Parse*,Table*,int,int,int,int*,int,int,int);
 | 
|  int sqlite3OpenTableAndIndices(Parse*, Table*, int, u8, int, u8*, int*, int*);
 | 
|  void sqlite3BeginWriteOperation(Parse*, int, int);
 | 
| @@ -3544,11 +3826,11 @@ void sqlite3SelectSetName(Select*,const char*);
 | 
|  #else
 | 
|  # define sqlite3SelectSetName(A,B)
 | 
|  #endif
 | 
| -void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
 | 
| -FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,u8);
 | 
| -void sqlite3RegisterBuiltinFunctions(sqlite3*);
 | 
| +void sqlite3InsertBuiltinFuncs(FuncDef*,int);
 | 
| +FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,u8,u8);
 | 
| +void sqlite3RegisterBuiltinFunctions(void);
 | 
|  void sqlite3RegisterDateTimeFunctions(void);
 | 
| -void sqlite3RegisterGlobalFunctions(void);
 | 
| +void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3*);
 | 
|  int sqlite3SafetyCheckOk(sqlite3*);
 | 
|  int sqlite3SafetyCheckSickOrOk(sqlite3*);
 | 
|  void sqlite3ChangeCookie(Parse*, int);
 | 
| @@ -3627,7 +3909,14 @@ LogEst sqlite3LogEstAdd(LogEst,LogEst);
 | 
|  #ifndef SQLITE_OMIT_VIRTUALTABLE
 | 
|  LogEst sqlite3LogEstFromDouble(double);
 | 
|  #endif
 | 
| +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || \
 | 
| +    defined(SQLITE_ENABLE_STAT3_OR_STAT4) || \
 | 
| +    defined(SQLITE_EXPLAIN_ESTIMATED_ROWS)
 | 
|  u64 sqlite3LogEstToInt(LogEst);
 | 
| +#endif
 | 
| +VList *sqlite3VListAdd(sqlite3*,VList*,const char*,int,int);
 | 
| +const char *sqlite3VListNumToName(VList*,int);
 | 
| +int sqlite3VListNameToNum(VList*,const char*,int);
 | 
|  
 | 
|  /*
 | 
|  ** Routines to read and write variable-length integers.  These used to
 | 
| @@ -3657,11 +3946,13 @@ const char *sqlite3IndexAffinityStr(sqlite3*, Index*);
 | 
|  void sqlite3TableAffinity(Vdbe*, Table*, int);
 | 
|  char sqlite3CompareAffinity(Expr *pExpr, char aff2);
 | 
|  int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
 | 
| +char sqlite3TableColumnAffinity(Table*,int);
 | 
|  char sqlite3ExprAffinity(Expr *pExpr);
 | 
|  int sqlite3Atoi64(const char*, i64*, int, u8);
 | 
|  int sqlite3DecOrHexToI64(const char*, i64*);
 | 
|  void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
 | 
|  void sqlite3Error(sqlite3*,int);
 | 
| +void sqlite3SystemError(sqlite3*,int);
 | 
|  void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
 | 
|  u8 sqlite3HexToInt(int h);
 | 
|  int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
 | 
| @@ -3694,7 +3985,7 @@ u8 sqlite3GetBoolean(const char *z,u8);
 | 
|  
 | 
|  const void *sqlite3ValueText(sqlite3_value*, u8);
 | 
|  int sqlite3ValueBytes(sqlite3_value*, u8);
 | 
| -void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, 
 | 
| +void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8,
 | 
|                          void(*)(void*));
 | 
|  void sqlite3ValueSetNull(sqlite3_value*);
 | 
|  void sqlite3ValueFree(sqlite3_value*);
 | 
| @@ -3709,7 +4000,7 @@ extern const unsigned char sqlite3UpperToLower[];
 | 
|  extern const unsigned char sqlite3CtypeMap[];
 | 
|  extern const Token sqlite3IntTokens[];
 | 
|  extern SQLITE_WSD struct Sqlite3Config sqlite3Config;
 | 
| -extern SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
 | 
| +extern FuncDefHash sqlite3BuiltinFunctions;
 | 
|  #ifndef SQLITE_OMIT_WSD
 | 
|  extern int sqlite3PendingByte;
 | 
|  #endif
 | 
| @@ -3721,7 +4012,7 @@ void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
 | 
|  int sqlite3GetToken(const unsigned char *, int *);
 | 
|  void sqlite3NestedParse(Parse*, const char*, ...);
 | 
|  void sqlite3ExpirePreparedStatements(sqlite3*);
 | 
| -int sqlite3CodeSubselect(Parse *, Expr *, int, int);
 | 
| +int sqlite3CodeSubselect(Parse*, Expr *, int, int);
 | 
|  void sqlite3SelectPrep(Parse*, Select*, NameContext*);
 | 
|  void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p);
 | 
|  int sqlite3MatchSpanName(const char*, const char*, const char*, const char*);
 | 
| @@ -3744,7 +4035,6 @@ void sqlite3DeleteIndexSamples(sqlite3*,Index*);
 | 
|  void sqlite3DefaultRowEst(Index*);
 | 
|  void sqlite3RegisterLikeFunctions(sqlite3*, int);
 | 
|  int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
 | 
| -void sqlite3MinimumFileFormat(Parse*, int, int);
 | 
|  void sqlite3SchemaClear(void *);
 | 
|  Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
 | 
|  int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
 | 
| @@ -3755,11 +4045,13 @@ KeyInfo *sqlite3KeyInfoOfIndex(Parse*, Index*);
 | 
|  #ifdef SQLITE_DEBUG
 | 
|  int sqlite3KeyInfoIsWriteable(KeyInfo*);
 | 
|  #endif
 | 
| -int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, 
 | 
| +int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
 | 
|    void (*)(sqlite3_context*,int,sqlite3_value **),
 | 
|    void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
 | 
|    FuncDestructor *pDestructor
 | 
|  );
 | 
| +void sqlite3OomFault(sqlite3*);
 | 
| +void sqlite3OomClear(sqlite3*);
 | 
|  int sqlite3ApiExit(sqlite3 *db, int);
 | 
|  int sqlite3OpenTempDatabase(Parse *);
 | 
|  
 | 
| @@ -3775,19 +4067,29 @@ Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int);
 | 
|  void sqlite3BackupRestart(sqlite3_backup *);
 | 
|  void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *);
 | 
|  
 | 
| +#ifndef SQLITE_OMIT_SUBQUERY
 | 
| +int sqlite3ExprCheckIN(Parse*, Expr*);
 | 
| +#else
 | 
| +# define sqlite3ExprCheckIN(x,y) SQLITE_OK
 | 
| +#endif
 | 
| +
 | 
|  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
 | 
|  void sqlite3AnalyzeFunctions(void);
 | 
| -int sqlite3Stat4ProbeSetValue(Parse*,Index*,UnpackedRecord**,Expr*,u8,int,int*);
 | 
| +int sqlite3Stat4ProbeSetValue(
 | 
| +    Parse*,Index*,UnpackedRecord**,Expr*,int,int,int*);
 | 
|  int sqlite3Stat4ValueFromExpr(Parse*, Expr*, u8, sqlite3_value**);
 | 
|  void sqlite3Stat4ProbeFree(UnpackedRecord*);
 | 
|  int sqlite3Stat4Column(sqlite3*, const void*, int, int, sqlite3_value**);
 | 
| +char sqlite3IndexColumnAffinity(sqlite3*, Index*, int);
 | 
|  #endif
 | 
|  
 | 
|  /*
 | 
|  ** The interface to the LEMON-generated parser
 | 
|  */
 | 
| -void *sqlite3ParserAlloc(void*(*)(u64));
 | 
| -void sqlite3ParserFree(void*, void(*)(void*));
 | 
| +#ifndef SQLITE_AMALGAMATION
 | 
| +  void *sqlite3ParserAlloc(void*(*)(u64));
 | 
| +  void sqlite3ParserFree(void*, void(*)(void*));
 | 
| +#endif
 | 
|  void sqlite3Parser(void*, int, Token, Parse*);
 | 
|  #ifdef YYTRACKMAXSTACKDEPTH
 | 
|    int sqlite3ParserStackPeak(void*);
 | 
| @@ -3816,7 +4118,7 @@ void sqlite3AutoLoadExtensions(sqlite3*);
 | 
|  #  define sqlite3VtabRollback(X)
 | 
|  #  define sqlite3VtabCommit(X)
 | 
|  #  define sqlite3VtabInSync(db) 0
 | 
| -#  define sqlite3VtabLock(X) 
 | 
| +#  define sqlite3VtabLock(X)
 | 
|  #  define sqlite3VtabUnlock(X)
 | 
|  #  define sqlite3VtabUnlockList(X)
 | 
|  #  define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK
 | 
| @@ -3833,6 +4135,13 @@ void sqlite3AutoLoadExtensions(sqlite3*);
 | 
|     int sqlite3VtabSavepoint(sqlite3 *, int, int);
 | 
|     void sqlite3VtabImportErrmsg(Vdbe*, sqlite3_vtab*);
 | 
|     VTable *sqlite3GetVTable(sqlite3*, Table*);
 | 
| +   Module *sqlite3VtabCreateModule(
 | 
| +     sqlite3*,
 | 
| +     const char*,
 | 
| +     const sqlite3_module*,
 | 
| +     void*,
 | 
| +     void(*)(void*)
 | 
| +   );
 | 
|  #  define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0)
 | 
|  #endif
 | 
|  int sqlite3VtabEponymousTableInit(Parse*,Module*);
 | 
| @@ -3874,7 +4183,7 @@ const char *sqlite3JournalModename(int);
 | 
|  ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign
 | 
|  ** key functionality is available. If OMIT_TRIGGER is defined but
 | 
|  ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In
 | 
| -** this case foreign keys are parsed, but no other functionality is 
 | 
| +** this case foreign keys are parsed, but no other functionality is
 | 
|  ** provided (enforcement of FK constraints requires the triggers sub-system).
 | 
|  */
 | 
|  #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
 | 
| @@ -3890,6 +4199,7 @@ const char *sqlite3JournalModename(int);
 | 
|    #define sqlite3FkDropTable(a,b,c)
 | 
|    #define sqlite3FkOldmask(a,b)         0
 | 
|    #define sqlite3FkRequired(a,b,c,d)    0
 | 
| +  #define sqlite3FkReferences(a)        0
 | 
|  #endif
 | 
|  #ifndef SQLITE_OMIT_FOREIGN_KEY
 | 
|    void sqlite3FkDelete(sqlite3 *, Table*);
 | 
| @@ -3908,10 +4218,10 @@ const char *sqlite3JournalModename(int);
 | 
|  
 | 
|  /*
 | 
|  ** The interface to the code in fault.c used for identifying "benign"
 | 
| -** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST
 | 
| +** malloc failures. This is only present if SQLITE_UNTESTABLE
 | 
|  ** is not defined.
 | 
|  */
 | 
| -#ifndef SQLITE_OMIT_BUILTIN_TEST
 | 
| +#ifndef SQLITE_UNTESTABLE
 | 
|    void sqlite3BeginBenignMalloc(void);
 | 
|    void sqlite3EndBenignMalloc(void);
 | 
|  #else
 | 
| @@ -3933,21 +4243,16 @@ const char *sqlite3JournalModename(int);
 | 
|  #define IN_INDEX_NOOP_OK     0x0001  /* OK to return IN_INDEX_NOOP */
 | 
|  #define IN_INDEX_MEMBERSHIP  0x0002  /* IN operator used for membership test */
 | 
|  #define IN_INDEX_LOOP        0x0004  /* IN operator used as a loop */
 | 
| -int sqlite3FindInIndex(Parse *, Expr *, u32, int*);
 | 
| +int sqlite3FindInIndex(Parse *, Expr *, u32, int*, int*);
 | 
|  
 | 
| +int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
 | 
| +int sqlite3JournalSize(sqlite3_vfs *);
 | 
|  #ifdef SQLITE_ENABLE_ATOMIC_WRITE
 | 
| -  int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
 | 
| -  int sqlite3JournalSize(sqlite3_vfs *);
 | 
|    int sqlite3JournalCreate(sqlite3_file *);
 | 
| -  int sqlite3JournalExists(sqlite3_file *p);
 | 
| -#else
 | 
| -  #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
 | 
| -  #define sqlite3JournalExists(p) 1
 | 
|  #endif
 | 
|  
 | 
| +int sqlite3JournalIsInMemory(sqlite3_file *p);
 | 
|  void sqlite3MemJournalOpen(sqlite3_file *);
 | 
| -int sqlite3MemJournalSize(void);
 | 
| -int sqlite3IsMemJournal(sqlite3_file *);
 | 
|  
 | 
|  void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p);
 | 
|  #if SQLITE_MAX_EXPR_DEPTH>0
 | 
| @@ -3978,7 +4283,7 @@ void sqlite3Put4byte(u8*, u32);
 | 
|  /*
 | 
|  ** If the SQLITE_ENABLE IOTRACE exists then the global variable
 | 
|  ** sqlite3IoTrace is a pointer to a printf-like routine used to
 | 
| -** print I/O tracing messages. 
 | 
| +** print I/O tracing messages.
 | 
|  */
 | 
|  #ifdef SQLITE_ENABLE_IOTRACE
 | 
|  # define IOTRACE(A)  if( sqlite3IoTrace ){ sqlite3IoTrace A; }
 | 
| @@ -4012,7 +4317,7 @@ SQLITE_API SQLITE_EXTERN void (SQLITE_CDECL *sqlite3IoTrace)(const char*,...);
 | 
|  ** that allocations that might have been satisfied by lookaside are not
 | 
|  ** passed back to non-lookaside free() routines.  Asserts such as the
 | 
|  ** example above are placed on the non-lookaside free() routines to verify
 | 
| -** this constraint. 
 | 
| +** this constraint.
 | 
|  **
 | 
|  ** All of this is no-op for a production build.  It only comes into
 | 
|  ** play when the SQLITE_MEMDEBUG compile-time option is used.
 | 
| @@ -4043,4 +4348,10 @@ int sqlite3ThreadJoin(SQLiteThread*, void**);
 | 
|  int sqlite3DbstatRegister(sqlite3*);
 | 
|  #endif
 | 
|  
 | 
| -#endif /* _SQLITEINT_H_ */
 | 
| +int sqlite3ExprVectorSize(Expr *pExpr);
 | 
| +int sqlite3ExprIsVector(Expr *pExpr);
 | 
| +Expr *sqlite3VectorFieldSubexpr(Expr*, int);
 | 
| +Expr *sqlite3ExprForVectorField(Parse*,Expr*,int);
 | 
| +void sqlite3VectorErrorMsg(Parse*, Expr*);
 | 
| +
 | 
| +#endif /* SQLITEINT_H */
 | 
| 
 |